2017-06-04 39 views
0

假設我有以下文件:生成文件選擇的先決條件

.:   include/ 01.src 02.src 03.src Makefile 

./include: 01.inc 02-source1.inc 02-source2.inc 

對此我有以下的Makefile(來源:Complex pattern rule in Makefile):

exe = ${patsubst %.src, %.exe, ${wildcard *.src}} 

all : ${exe} 

.SECONDEXPANSION: 
${exe} : %.exe : %.src $${wildcard include/%*.inc} 
    @echo compile [email protected] using $^ 

這是說01.exe將被編譯使用01.srcinclude/01*.inc(類似於02.exe03.exe)。事實上,使輸出:

compile 01.exe using 01.src include/01.inc 
compile 02.exe using 02.src include/02-source1.inc include/02-source2.inc 
compile 03.exe using 03.src 

我的問題是:我應該如何修改這個Makefile如果01.src02.src03.src重命名爲01-first.src02-second.src03-third.src所需的輸出是:

compile 01-first.exe using 01-first.src include/01.inc 
compile 02-second.exe using 02-second.src include/02-source1.inc include/02-source2.inc 
compile 03-third.exe using 03-third.src 
+0

是別人強加那猙獰的命名約定你嗎? – Beta

+0

是的。雖然該項目有點大,但我願意接受建議;) – vagoberto

+0

**要小心表明你比你的老闆更聰明。**遵守強加給你的規則,但看看你可以做出什麼樣的改進安全。例如,如果您爲源文件創建符號鏈接(具有合理的名稱),那麼makefile將會更簡單。 – Beta

回答

1

試試這個:

${exe} : %.exe : %.src $${wildcard include/$$(shell echo % | head -c 2)*.inc} 
    @echo compile [email protected] using $^ 

輸出:

compile 03-third.exe using 03-third.src 
compile 02-second.exe using 02-second.src include/02-source1.inc include/02-source2.inc 
compile 01-first.exe using 01-first.src include/01.inc