子目录和Makefile

时间:2010-08-16 16:05:27

标签: makefile

我认为这是一个多次被问到的问题,但我找不到正确的方式来做这件事。

我有以下结构:

project/
project/Makefile
project/code
project/code/*.cc
project/code/Makefile

当我在“项目/代码”目录中并调用“make project_code”时,我的代码正在正确编译。

当我在'project /'时,我想这样做,只是调用“make project_code”就好像我在'project / code'中一样。

makefile'project / Makefile'将包含其他规则(例如'install')和一些编译规则,就好像我在'project / code'中一样。为此,我请求你的帮助......谢谢。

2 个答案:

答案 0 :(得分:81)

最简单的方法是:

CODE_DIR = code

.PHONY: project_code

project_code:
       $(MAKE) -C $(CODE_DIR)

.PHONY规则意味着project_code不是需要构建的文件,-C标志表示目录中的更改(相当于之前运行cd code打电话给make)。您可以使用相同的方法调用code Makefile中的其他目标。

例如:

clean:
       $(MAKE) -C $(CODE_DIR) clean

答案 1 :(得分:1)

尝试将此规则放在project / Makefile中(对于GNU make):

.PHONY: project_code
project_code:
       cd code && make