我的项目目录结构如下:
╷ /
├ Makefile
├┐ dir1/
│├ foo.in
│└ foo.out
├┐ dir2/
┊┊
,Makefile包含项目中所有文件的规则,例如
dir1/%.out: dir1/%.in
gen_out $< $@
如果我在顶级目录中,我可以正常运行make dir1/foo.out
。
问题是:在make foo.out
内调用dir1
具有相同效果的最优雅方式是什么?
答案 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