在没有长命令行的情况下更改make的工作目录

时间:2014-05-20 07:53:14

标签: makefile gnu-make

我想更改makefile的工作目录。

(多余的信息:我有一个我最想重用的遗留makefile,虽然许多目标和生成的deps文件假设工作目录不会有所不同。我的想法是为我的新项目创建一个makefile,在另一个目录中,包含旧目录,并将工作目录设置为旧目录。)

我可以使用

从命令行轻松完成此操作
make -f /path/to/new/makefile -C /path/to/old/makefile

此makefile的用户不希望每次都输入该内容。


尝试1

在makefile中使用MAKEFLAGS。但这些似乎都没有任何影响。 (我理解为什么-f无法产生影响;我真的很想知道-C。)

我查看了http://www.gnu.org/software/make/manual/html_node/Options-Summary.html,但我找不到MAKEFLAGS中允许的内容以及不适合的内容。


尝试2

使用新目标

创建makefile2
include path/to/old/makefile

foo: bar

然后makefile通过

传递所有内容
%:
    $(MAKE) -f $(abspath makefile2) -C path/to/old/makfele /$*

我没有很好的自动完成,并行作业不起作用,调试选项(干运行)不起作用。


所以

(1)为什么-C不起作用MAKEFLAGS(它确实有效,但我犯了一个错误;它不起作用,并且有记录;它不起作用,并且它没有记录,但它是故意的;它不起作用,它是一个bug)?

(2)有没有更好的方法来更改makefile的工作目录?

1 个答案:

答案 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

如果名称只是Makefilemakefile,则无需提供-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)