我知道这可以通过不同的方式完成,但我实际上正在寻找更多关于makefiles的信息。
我希望能够调用make somefile.txt
并运行给定的脚本。
在我当前的文件夹中,我有:
生成文件
%.txt:
# perl -pe "s/#.*//g; s/^n//g; s/n/t/g;" .txt
echo "Hi"
当我打电话给make
时,我得到了
make: `somefile.txt' is up to date.
我知道我需要使用.PHONY
,但是我在尝试将其与%.txt
一起使用时遇到麻烦。
我已经尝试过诸如
files = *.txt
.PHONY = $(files)
%.txt:
# perl -pe "s/#.*//g; s/^n//g; s/n/t/g;" .txt
echo "Hi"
但这实际上并没有奏效。
(a(传统的方法是让你的真实目标有一个虚假的目标作为先决条件。 虚假目标最初总是被认为是过时的,因此任何依赖于虚假目标的东西也将始终被认为是过时的。 "力"是用于此目的的目标的常规名称。
例如
.PHONY: force
force:
%.txt: force
echo "Hi at $$(date)" > $@
如示例中所示,这不需要虚假目标具有配方。
如果你不想在 makefile 中列出要构建的目标,而只是在命令行上给出它们,你可以使用这个:
.PHONY: $(MAKECMDGOALS)
变量MAKECMDGOALS
将设置为您在命令行上给出的目标集。
重要的是要了解生成文件不是 shell,因此仅将*.txt
粘贴到生成文件中的任何位置并不总是会扩展它。 只有生成文件的特定区域直接使用 shell glob。
如果你想总是扩展它,你可以使用 make 的wildcard
函数,如下所示:
files = $(wildcard *.txt)