2014-02-22 50 views
1

我正在編寫一個靜態模式規則來爲匹配模式的目標生成依賴關係列表。依賴關係是通過shell命令生成的(文件內容提供關於依賴關係的信息)。這裏有明確的規則的例子:雖然這個工程如何將目標詞幹傳遞給Makefile中的shell命令

f1.o: $(shell gendep src/f1/f1.source) 
    ... (some compilation command here) ... 

,我不想把它改寫爲每個新的目標,因爲我保持相同的文件結構。我在靜態模式規則的嘗試是,像這樣:

%.o: $(shell gendep src/%/%.source) 
    ... 

我在經過幹細胞(用於%匹配的模式)的shell命令的麻煩。 shell命令按照字面解釋它,並在src /%/%。source上運行,這當然不存在。

我懷疑是有方法傳遞到shell命令,但我似乎沒有找到它。這裏的任何專家都可以幫助我?對不起,如果這是一個新手問題(我確實是一個)。

回答

2

您要做的事很難,因爲通常Make會在運行任何規則之前展開$(shell ...)指令,或者甚至決定必須運行哪些規則。我們可以減緩通過的Secondary Expansion,稍微先進的化妝技巧是指:

.SECONDEXPANSION: 

%.o: $$(shell gendep src/$$*/$$*.source) 
    ... 

也有other methods for automatic dependency generation

+0

我確實嘗試過,但不起作用。例如,當我嘗試$(shell gendep src/$ */$ *。source)時,我收到一個錯誤(由gendep拋出),它正在尋找src //。source.source。不知道我是否做錯了什麼。 – dkn37

+0

@ dkn37:對不起,我匆匆讀了你的問題,我以爲你是指規則體中的shell命令。我會修改... – Beta

相關問題