首页 > 解决方案 > 如何在 makfile 命令中使用 eval 使用 bash 变量更改宏值

问题描述

我在 makefile 命令中有一个 bash 函数,并且想要更改宏值。可能吗?

C_DFLAGS :=

gui : 
    parse_flags () { echo $$1; for word in $$1; do if [ $${word::2} = -D ] ; then $(eval C_D_FLAGS+=$${word}); fi ; done ; } ; parse_flags "-D/test -D/TEST" 
    @echo "C_D_FLAGS :$(C_D_FLAGS)"

标签: bashmakefile

解决方案


$(eval)将在您的实际 bash 函数调用之前进行解释。您不能make从 bash 更新变量 - 这是一个下游过程。

但是,您尝试运行的代码很容易用本机语法替换,即:

$ cat Makefile
C_D_FLAGS :=

gui: C_D_FLAGS += -D/test -D/TEST
gui:
        @echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS: -D/test -D/TEST

如果标志是从其他地方提供的,它们也可以被过滤,即:

$ cat Makefile
C_D_FLAGS :=

gui: C_D_FLAGS += $(filter -D%,$(EXTRA_FLAGS))
gui:
        @echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS:
$ make gui EXTRA_FLAGS="-Isomething -DFOO -m32"
C_D_FLAGS: -DFOO

推荐阅读