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

问题描述 投票:0回答:1

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

谢谢你的建议!

gnu-make
1个回答
0
投票

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

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

所以,要做你想要的,你结合这些功能:

make -n -W src1 exe1

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

make -n -o src2 -W src1
© www.soinside.com 2019 - 2024. All rights reserved.