我可以将变量作为命令行参数传递给GNUMakefile吗?换句话说,我想传递一些参数,这些参数最终将成为Makefile中的变量。


当前回答

根据手册:

make中的变量可以来自运行make的环境。make启动时看到的每个环境变量都被转换为具有相同名称和值的make变量。但是,makefile中的显式赋值或带有命令参数的赋值会覆盖环境。

所以你可以(从bash):

FOOBAR=1 make

在Makefile中生成变量FOOBAR。

其他回答

export ROOT_DIR=<path/value>

然后使用Makefile中的变量$(ROOT_DIR)。

如果您创建一个名为Makefile的文件,并添加一个类似于$(unittest)的变量那么即使使用通配符,也可以在Makefile中使用该变量

例子:

make unittest=*

我使用BOOST_TEST,并为参数--run_TEST=$(unittest)提供通配符然后我将能够使用正则表达式过滤掉我想要的Makefile测试运行

最简单的方法是:

make foo=bar target

然后在makefile中可以引用$(foo)。注意,这不会自动传播到子制作。

如果您正在使用子制造,请参阅本文:向子制造传递变量

似乎命令args覆盖了环境变量。

生成文件:

send:
    echo $(MESSAGE1) $(MESSAGE2)

示例运行:

$ MESSAGE1=YES MESSAGE2=NG  make send MESSAGE2=OK
echo YES OK
YES OK

假设你有一个这样的makefile:

action:
    echo argument is $(argument)

然后你可以称之为make action argument=something