如何将所有命令行参数传递给Makefile中的程序?

时间:2014-01-26 02:33:14

标签: makefile

我能做到:

all:
    $(CC) -DFOO=$(FOO) -DBAR=$(BAR) main.c

并将其命名为:

make FOO=foo BAR=bar

但我想要一种更通用的解决方案,我不必在编译器调用行中编写所有可能的变量。我知道,例如,MAKECMDGOALS变量包含命令行中的所有目标。有任何类似MAKECMDVARS的变量包含命令行中的所有变量吗?所以我可以这样做:

CONFIGS = $(addprefix -D, $(MAKECMDVARS))

all:
    $(CC) $(CONFIGS) main.c

1 个答案:

答案 0 :(得分:2)

在我看来,这是一个坏主意。它会打破每个人对make如何工作的理解,这意味着你不能将变量覆盖用于其预期目的。如果您希望仅使用make进行单个构建更改CC,该怎么办?还是CFLAGS?还是其他一些变量?

但是,如果您真的想这样做,您可以:在命令行上分配的所有变量都放入-*-command-variables-*-变量中:

$ echo 'all: ; @echo variables: $(-*-command-variables-*-)' | make -f-
variables:

$ echo 'all: ; @echo variables: $(-*-command-variables-*-)' | make -f- FOO=foo BAR=bar
variables: BAR=bar FOO=foo