我有一个带有多个目标的生成文件,这些目标是通过从工作目录外部复制文件生成的。
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 $< $@. 容易出错。 - 只是复制和粘贴。笨拙但有效且易于理解。