【发布时间】:2013-03-21 17:26:38
【问题描述】:
我在不同的目录中有一堆 C 文件,我的递归 Makefile 出现make: nothing to be done for 'all' 错误;但是,如果我调整依赖项,我可以让它工作......但我不明白为什么我必须这样做。
这是我原来的 Makefile:
APP_DIRS=rescoco ressys resvm
.PHONY: all
all: $(APP_DIRS)
$(APP_DIRS):
$(MAKE) --directory $@
clean:
$(RM) *~
现在,如果我将我的线路:.PHONY 更改为 .PHONY: all $(APP_DIRS),它构建得很好。
另一种可能性是,如果我将行:$(APP_DIRS): 更改为 $(APP_DIRS): clean,它构建得很好。
(注意:删除 .PHONY 目标不会改变任何内容)
那么这里发生了什么? Makefile 是否试图告诉我我没有正确列出依赖项?我在想make 会做类似的事情:
- 构建
.PHONY我首先要构建all - 构建
all我首先要构建$(APP_DIRS) -
$(APP_DIRS)没有先决条件,因此请为此执行命令(这将导致递归 make 运行)。
显然我错了;但为什么?
仅供参考,如果重要的话,我的文件结构如下:
Makefile #top level makefile as seen above
/rescoco
rescoco.c
Makefile #builds rescoco src and moves archive to ../lib directory
/ressys
ressys.c
Makefile #same as above but for ressys
/resvm
resvm.c
Makefile #same as above but for resvm
/lib
而我的构建命令就是make。当我使用make -n 或make -n all 运行时,我根本没有输出:
:~/proj$ make -n all
make: Nothing to be done for 'all'.
:~/proj$
【问题讨论】:
-
你用的是什么命令?全部搞定?
-
运行 make -n 看看到底发生了什么。我还使用变量打印来确保一切正常。
-
@75inchpianist - 只是
make,但make all给出了相同的结果。 (见编辑) -
好吧,我想我一秒搞错了
-
@Mellowcandle -
make -n什么都不转储。这是一个非常简单的makefile,转储不多。我尝试添加$(warning $(APP_DIRS))作为构建all的步骤,它只是报告了rescoco ressys resvm,这是我所期望的......关于转储的任何其他建议?