【发布时间】:2009-03-28 15:14:53
【问题描述】:
我有一个正在发布的项目,它实际上包含 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
在我的主 Makefile 中,我有:
spidermonkey:
@cd spidermonkey/src && $(MAKE) JS_DIST=/usr JS_THREADSAFE=1 JS_HAS_FILE_OBJECT=1
运行“make spidermonkey”会输出“make: Nothing to be done for `spidermonkey'。”如何让 make 运行命令?
编辑: 我尝试将以下几行添加到我的 makefile 中:
.PHONY: spidermonkey
以及将spidermonkey规则重命名为sm,但仍然没有变化。
编辑: 我的错!当我应该有一个标签时,我有空格。呵呵!
【问题讨论】:
-
make 中的 TAB 与空格问题有点棘手,但大多数现代 make 编辑器(例如 Emacs)非常清楚地突出显示应该有制表符的空格。 Emacs 甚至不会在不询问您是否真的需要空格的情况下让您保存。
标签: makefile compilation