题
我有我的工作,以释放实际上包含3个子项目,所有这些都需要一次过进行编译的项目。我的makefile文件看起来大致是这样的:
all: a b c
a:
@cd a && make
b:
@cd b && make
c:
@cd c && make
项目A和B都编译罚款,但对于第三项目,它告诉我还有什么可尽管切换到C目录,并运行make事实上确实编译代码完成。
要成为一个更具体一点:项目C在上面的示例中实际上是Mozilla的SpiderMonkey的。而A和B的代码/我写的makefile,C是从Mozilla的SpiderMonkey的网站只是一个原始副本。为它的实际编译命令是:
make JS_DIST=/usr JS_THREADSAFE=1 JS_HAS_FILE_OBJECT=1
在我的主人生成文件,我有:
spidermonkey:
@cd spidermonkey/src && $(MAKE) JS_DIST=/usr JS_THREADSAFE=1 JS_HAS_FILE_OBJECT=1
运行“使SpiderMonkey的”输出“使:用于`的SpiderMonkey”做没什么。”我该如何使运行命令?
编辑: 我尝试添加以下行到我的生成文件:
.PHONY: spidermonkey
除了重命名规则的SpiderMonkey至Sm,但仍然没有变化。
编辑: 我的错!我有空间时,我应该有一个标签。卫生署!
解决方案
您可能不得不在被称为“SpiderMonkey的”顶层文件或目录。让认为这就是它的目的是为了建立,并且因为它已经存在,使停止。
其中一个最重要的规则可循时写的makefile是每个目标应该创建一个文件具有相同的名称作为目标即可。换句话说,如果有
a:
<some command>
该命令应产生称为 “A” 的单个文件。
不产生文件,但是只有那里占位符名为伪目标,然后他们应该宣布这样的规则:
.PHONY: a
请然后将总是假设必须被重制。
此外,作为一般规则的不要使用 “使” 援引使递归,使用$(MAKE),而不是
编辑:改变 “伪” 至 “假”
其他提示
请只检查一个名为一样的规则目标文件(或目录)是否存在等,如果有(它比依赖较新的),然后从视图中所做的观点没有什么更多的事情要做。
所以,你的问题是,你有一个规则的SpiderMonkey(无依赖性)以及一个名为SpiderMonkey的目录,然后让认为“目标已经作出,没有为我做的。”若要让做你想做的,重命名的SpiderMonkey规则(或目录)。
顺便说一下递归之作来说,这不是neccessarily一个好主意, 请参阅递归请是有害。