make选项 - what-if考虑其他过时的文件

时间:2017-12-14 10:44:09

标签: gnu-make

我正在尝试获取依赖于单个文件的目标列表。 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”......

$ 触摸src2

$ make -n -W src1

echo "c" > obj1
echo "a" > exe1
echo "d" > obj2
echo "b" > exe2 

所以make“make”也是“exe2”。 有没有办法告诉make忽略任何其他过时的文件? 在这种情况下,我不想知道“exe2”会被重建,因为它不依赖于文件“src1”。

换句话说,我正在寻找这个问题的答案:“哪些目标取决于src1?”

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

无论您为-W提供哪些选项,make都会尝试构建标准目标集(“目标目标”)。 -W对目标定位的选择没有影响。

如果您希望make构建一个特定目标,那么您可以在命令行上提供该目标。因此,如果您只想构建exe1而不是exe2,则可以运行make exe1

为了做你想做的事,你要结合这些功能:

make -n -W src1 exe1

如果您想假设src2不是新的,可以使用-o选项:

make -n -o src2 -W src1