在子目录中使用顶级makefile

时间:2013-04-10 09:20:47

标签: makefile subdirectory

我的项目目录结构如下:

╷ /
├ Makefile
├┐ dir1/
│├ foo.in
│└ foo.out
├┐ dir2/
┊┊

,Makefile包含项目中所有文件的规则,例如

dir1/%.out: dir1/%.in
    gen_out $< $@

如果我在顶级目录中,我可以正常运行make dir1/foo.out

问题是:在make foo.out内调用dir1具有相同效果的最优雅方式是什么?

3 个答案:

答案 0 :(得分:1)

您的选择有限。您可以在-f ../Makefile命令行上使用make标志,也可以在make周围编写一个包装器脚本来确定当前位置,并使用适当的标志调用它,具体取决于您所在的位置

您可以将MAKEFILES环境变量设置为包含makefile的完全限定路径名。

你可以在每个目录中创建一个小的make -file,除了用适当的顶级makefile重新调用$(MAKE)之外什么也不做。

答案 1 :(得分:0)

您可以使用makepp轻松完成此操作。只需将Makefile重命名为RootMakeppfile即可。这将首先加载到您的树中。

与传统品牌不同,makepp不需要进行递归构建。因此,您还可以将Makefile放入每个目录中,makepp会将您需要的所有内容加载到一个进程中。这样,它可以一致地查看整个项目,并可以检测并跟踪所有依赖项。

答案 2 :(得分:0)

试试这个:

cd dir1 && make -f ../Makefile foo.out