0

我有一个目录结构如下的项目:

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

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

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

如果我在顶级目录中,我可以运行make dir1/foo.out得很好。

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

4

3 回答 3

1

你的选择是有限的。您可以-f ../Makefile在命令行上使用该标志make,也许通过编写一个包装脚本来make确定当前位置并根据您所在的位置使用适当的标志调用它。

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

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

于 2013-04-10T11:40:41.487 回答
0

您可以使用makepp轻松做到这一点。只需将您的 Makefile 重命名为 RootMakeppfile。这将首先加载您在树中的任何位置。

与传统的 make 不同,makepp 不需要进行递归构建。所以你也可以在每个目录下放一个 Makefile,makepp 会把你需要的全部加载到一个进程中。这样,它对您的整个项目有一个一致的视图,并且可以检测和跟踪所有依赖项。

于 2013-04-10T21:16:15.863 回答
0

尝试这个:

cd dir1 && make -f ../Makefile foo.out
于 2014-11-13T10:05:49.333 回答