我有一个带有多个目标的生成文件,这些目标是通过从工作目录外部复制文件生成的。
a.tex : $(wildcard /foo/work1/a.tex)
cp -p $< $@
b.tex : $(wildcard /foo/work2/b.tex)
cp -p $< $@
我之所以使用$(wildcard)
Make,是因为有时我会在无法访问/foo
.
避免cp -p $< $@
对每条规则重复命令的最佳方法是什么?一些选项:
- 设置
%.tex : %.tex
规则。这可行,但它也适用于未明确指出的目标,因此我收到很多警告,例如make: Circular a.tex <- a.tex dependency dropped.
- 用 定义一系列命令
define
。这似乎毫无意义,因为该命令只有一行。因此cp $< $@
,我不会复制到每个规则,而是定义一个cp-dep
序列并复制cp-dep
到每个规则。 - 将命令定义为变量,以便我可以做
a.tex : $(wildcard /foo/work1/a.tex); $(CP-DEP)
- 复制目标名称作为附加规则。
a.tex b.tex : ; cp -p $< $@
. 容易出错。 - 只是复制和粘贴。笨拙但有效且易于理解。