【发布时间】:2014-09-06 18:11:01
【问题描述】:
我正在编写一个 GNU makefile 来创建一个许可证文件,如下所示:如果客户的文件存在,则将其复制到包目录,否则使用通用许可证。我有大约十几个具有相同复制模式的文件。目标是将两个互斥的源文件之一复制到目标文件名上。
有没有更好的方法用 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 $@
@sed --expression="\
... \
< '$<' \
> '$@'
${PDIR}:
mkdir $@
【问题讨论】: