Build gnuMake,如何强迫一个虚假的目标运行不止一次?

Build gnuMake,如何强迫一个虚假的目标运行不止一次?,build,makefile,gnu-make,Build,Makefile,Gnu Make,我的构建系统坚持在一次调用中使用所有目标执行make,因此我得到: make clean test clean build 第二个clean只会说“对‘clean’不做任何事情”,即使它被添加到了.PHONY目标中 有什么办法吗?我验证了这一点。试试这个: test: ... ... build: ... ... clean%: ... ... 然后你可以打电话: make clean1 test clean2 build 似乎只要目标名称不同,即使它命中相同的目

我的构建系统坚持在一次调用中使用所有目标执行make,因此我得到:

make clean test clean build

第二个clean只会说“对‘clean’不做任何事情”,即使它被添加到了.PHONY目标中


有什么办法吗?

我验证了这一点。试试这个:

test: ...
    ...

build: ...
    ...

clean%: ...
    ...
然后你可以打电话:

make clean1 test clean2 build
似乎只要目标名称不同,即使它命中相同的目标模式,它也会重新运行它。

Yuk!不要这样做。不要依赖于目标的隐式排序,当您使用
make-j
时,它会完全改变。明确你的订单。如果您真的必须在构建之间进行清理,则执行以下操作:

.PHONY: everything
everything:
    ${MAKE} clean
    ${MAKE} test
    ${MAKE} clean
    ${MAKE} build

同样,递归生成很难闻,但在这种情况下是最好的选择。

简短回答:不。不再回答:也许,你想做什么?@Beta基本上我有一个虚假的步骤来创建一些数据文件(基本上它连接一些文件并运行模板引擎来填补一些空白),然后我运行测试,然后我清理所有东西,再次运行数据文件步骤,作为实际打包软件的最后一步。。。该公司使用哈德逊乔布斯。我想在第一个步骤完成测试后,我会触发一个新的打包步骤。试图避免这种情况,因为创建一个新的虚拟机花费太多(时间太长)等等。。。或者,我只需将该虚假目标的工作复制两次(毕竟,它在make文件中有2行)您确定
测试步骤修改了数据文件吗?如果是这样,你应该重新考虑你的设计;如果没有,就没有必要重建它们。也就是说,最简单的方法可能是复制生成它们的命令。在这个环境中,我可以控制-j,但要记住这是一个非常好的想法。@gcb
-jSadly,当您使用并行make(这是make IMHO的全部要点)时,它会完全中断。