0
我正在寫一個GNU makefile來創建一個許可證文件,如下所示:如果客戶的文件存在然後將其複製到軟件包目錄,否則使用通用許可證。我有大約十幾個具有相同複製模式的文件。目標是將兩個互斥源文件中的一個複製到目標文件名。GNU make:友好的方式來選擇互斥文件
有沒有更好的方式來表達這與GNU make語法?這是我目前的。我考慮將所有GENERIC文件複製到目錄,然後覆蓋現有的CUST文件。
$(PDIR)/license.txt: | $(PDIR)
if [ -f Package/license.txt.$(CUST) ] ; \
then \
cat Package/license.txt.$(CUST) >$(PDIR)/license.txt ; \
else \
cat Package/license.txt.GENERIC >$(PDIR)/license.txt ; \
fi
編輯:感謝MadScientist的幫助。這是我的最終工作版本:
TARGETS = license.txt ...
final: $(addprefix ${PDIR}/,${TARGETS})
@echo some output
$(foreach T,${TARGETS},$(eval ${PDIR}/$T: $(firstword $(wildcard Package/$T.${CUST} Package/$T.GENERIC Package/$T)) | ${PDIR}))
$(addprefix ${PDIR}/,${TARGETS}):
@echo Creating substituted version of $< as [email protected]
@sed --expression="\
... \
< '$<' \
> '[email protected]'
${PDIR}:
mkdir [email protected]
我讀的文檔,試圖瞭解發生了什麼事情。在第二個示例中,最後的make目標僅包含$ {TARGETS}中的第一個文件。我如何解決這個問題?另外,$(PDIR)沒有被創建,foreach中「| $(PDIR)」的目的是什麼? – ljdelight 2014-09-06 19:01:11
沒關係,該foreach錯過了關閉paren,我把它放在了錯誤的地方。謝謝! – ljdelight 2014-09-06 19:18:42