我正在尝试获取依赖于单个文件的目标列表。 make的“--what-if”选项似乎可以完成这项工作,但是我想忽略任何其他过时的文件,除了我作为参数提供的文件。
这是我的测试用例(使用gnu make 4.0处理debian):
$ cat makefile
all: exe1 exe2
exe1: obj1
echo "a" > exe1
exe2: obj2
echo "b" > exe2
obj1: src1
echo "c" > obj1
obj2: src2
echo "d" > obj2
$ make
make: Nothing to be done for 'all'.
$ make -n -W src1
echo "c" > obj1
echo "a" > exe1
完善。这是我想要的答案:修改src1会导致重建exe1。
但如果我改变其他文件“src2”......
$ touch src2
$ make -n -W src1
echo "c" > obj1
echo "a" > exe1
echo "d" > obj2
echo "b" > exe2
所以make“make”也是“exe2”。有没有办法告诉make忽略任何其他过时的文件?在这种情况下,我不想知道“exe2”将被重建,因为它不依赖于文件“src1”。
换句话说,我正在寻找这个问题的答案:“什么目标取决于src1?”
谢谢你的建议!
无论您给-W
提供什么选项,make都会尝试构建标准的目标集(“目标目标”)。 -W
对目标目标的选择没有影响。
如果您希望make构建一个特定目标,那么您可以在命令行上提供该目标。所以,如果你只想制作exe1
而不是exe2
,你会运行make exe1
。
所以,要做你想要的,你结合这些功能:
make -n -W src1 exe1
如果你想假设src2
不是新的,你可以使用-o
选项:
make -n -o src2 -W src1