我能做到:
all:
$(CC) -DFOO=$(FOO) -DBAR=$(BAR) main.c
并将其命名为:
make FOO=foo BAR=bar
但我想要一种更通用的解决方案,我不必在编译器调用行中编写所有可能的变量。我知道,例如,MAKECMDGOALS变量包含命令行中的所有目标。有任何类似MAKECMDVARS的变量包含命令行中的所有变量吗?所以我可以这样做:
CONFIGS = $(addprefix -D, $(MAKECMDVARS))
all:
$(CC) $(CONFIGS) main.c
答案 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