Build gnuMake,如何强迫一个虚假的目标运行不止一次?
我的构建系统坚持在一次调用中使用所有目标执行make,因此我得到: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 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的全部要点)时,它会完全中断。