我有我的工作,以释放实际上包含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一个好主意, 请参阅递归请是有害

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top