我想更改makefile的工作目录。
(多余的信息:我有一个我最想重用的遗留makefile,虽然许多目标和生成的deps文件假设工作目录不会有所不同。我的想法是为我的新项目创建一个makefile,在另一个目录中,包含旧目录,并将工作目录设置为旧目录。)
我可以使用
从命令行轻松完成此操作make -f /path/to/new/makefile -C /path/to/old/makefile
此makefile的用户不希望每次都输入该内容。
在makefile中使用MAKEFLAGS
。但这些似乎都没有任何影响。 (我理解为什么-f
无法产生影响;我真的很想知道-C
。)
我查看了http://www.gnu.org/software/make/manual/html_node/Options-Summary.html,但我找不到MAKEFLAGS
中允许的内容以及不适合的内容。
使用新目标
创建makefile2
include path/to/old/makefile
foo: bar
然后makefile
通过
%:
$(MAKE) -f $(abspath makefile2) -C path/to/old/makfele /$*
我没有很好的自动完成,并行作业不起作用,调试选项(干运行)不起作用。
所以
(1)为什么-C
不起作用MAKEFLAGS
(它确实有效,但我犯了一个错误;它不起作用,并且有记录;它不起作用,并且它没有记录,但它是故意的;它不起作用,它是一个bug)?
(2)有没有更好的方法来更改makefile的工作目录?
答案 0 :(得分:0)
这里有些问题:
make -f /path/to/new/makefile -C /path/to/old/makefile
-f
选项指定在使用-C
指定的目录中搜索时要找到的Makefile的名称(如果未提供,则指定当前目录)。所以它更多:
make -C /path/to/old/Makefile -f name_of_old_makefile
如果名称只是Makefile
或makefile
,则无需提供-f
选项。
MAKEFLAGS
变量在被调用的子Makefile中不包含-f
或-C
。
为了能够将多个目标传递给另一个makefile,您需要MAKECMDGOALS
变量。
最终,你在新的Makefile中所要做的就是拥有这样的东西:
all:
$(MAKE) $(MAKEFLAGS) -C /path/to/old/Makefile -f old_Makefile_name $@
%:
$(MAKE) $(MAKEFLAGS) -C /path/to/old/Makefile -f old_Makefile_name $(MAKECMDGOALS)