【发布时间】:2015-09-01 07:19:06
【问题描述】:
我正在使用 GNU make,并且正在尝试基于目标创建先决条件。我希望先决条件是目标的基本名称。所以,当我运行这个时:
make a/b/foo.txt
它应该运行这个:
cp foo.txt a/b/foo.txt
这些都不起作用:
a/%.txt: $(basename $@)
cp $< $@
a/%.txt: $(@F)
cp $< $@
a/%.txt: $(shell basename $@)
cp $< $@
a/%.txt: $(basename %)
cp $< $@
a/%.txt: $(shell basename %)
cp $< $@
我已经看到目标和先决条件中使用了 %,因此我知道将先决条件基于目标是正常的。我也在先决条件中看到了变量,所以这也是正常的。但似乎特殊变量 $@ 和 $(@F) 在先决条件中不可用,以及 basename 和 shell 等函数。有什么方法可以解决这个限制吗?
【问题讨论】:
-
不会是
a/b/%.txt: %.txt吗? -
这里的想法是目录 a 是已知的。其余的可以是任何东西:a/b/c/d/foo.txt、a/c/d/foo.txt 等。它应该将 foo.txt 复制到目标。