2013-02-09 58 views
3

我的构建系统坚持执行使在一个呼叫中的所有目标,所以我得到:“对'干净”做没有什么”gnuMake,如何强制假目标多次运行?

make clean test clean build

第二清洁只想说即使它被添加到.PHONY目标。

有什么办法呢?

+0

简答题:没有。较长的回答:也许,你想做什么? – Beta 2013-02-09 05:36:06

+0

@Beta基本上我有一个虚假的步骤来创建一些数据文件(基本上它连接了一些文件,并运行模板引擎来填补一些空白),然后我运行测试,然后我清理一切,然后再次运行该数据文件步骤实际包装软件的最后一步...公司使用哈德森工作。我想我会在第一个测试之后触发一个新的包装步骤。试图避免这一点,因为它太昂贵(及时)创建一个新的虚拟机和所有的......或者我可能只是复制那个虚假目标的工作两次(毕竟它是两行的make文件) – gcb 2013-02-09 06:05:35

+1

你确定'test'步骤修改数据文件?如果是这样,你应该重新考虑你的设计;如果没有,则不需要重建它们。也就是说,最简单的方法可能是复制构建它们的命令。 – Beta 2013-02-09 16:49:16

回答

3

哟!做不是做到这一点。当您使用make -j时,不要依赖目标的隐式排序—它完全更改。让您的订购明确。如果你真的必须清理构建之间,则是这样的:

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

再次,递归make是相当臭,但在这种情况下,你最好的选择。

+0

我对这个环境有-j的控制权,但这是一个非常好的想法。 – gcb 2013-02-11 18:56:49

4

我对此产品进行了验证。试试这个:

test: ... 
    ... 

build: ... 
    ... 

clean%: ... 
    ... 

然后,您可以拨打:

make clean1 test clean2 build 

似乎只要目标名称是不同的,即使它击中同一个目标模式,它会重新运行它。

+0

不幸的是,当你使用平行_make_(这是_make_恕我直言的整点)时,它会完全中断。 – bobbogo 2015-07-09 10:53:27

相关问题