Linux 如何测试符号是否添加到Makefile中的CFLAGS?

Linux 如何测试符号是否添加到Makefile中的CFLAGS?,linux,makefile,Linux,Makefile,如果我在Makefile中添加以下一行: CFLAGS += -DMY_SYMBOL 如何测试“MY_SYMBOL”是否在子目录Makefile中定义?似乎以下情况不起作用: ifdef MY_SYMBOL #do something endif 谢谢 以下情况似乎也不起作用: define symbol_in_cflags_check @echo $(1) @echo $(2) ifeq ($(1), $(2)) SUBDIRS := music endif endef RESULT :

如果我在Makefile中添加以下一行:

CFLAGS += -DMY_SYMBOL
如何测试“MY_SYMBOL”是否在子目录Makefile中定义?似乎以下情况不起作用:

ifdef MY_SYMBOL
#do something
endif
谢谢

以下情况似乎也不起作用:

define symbol_in_cflags_check
@echo $(1)
@echo $(2)
ifeq ($(1), $(2))
SUBDIRS := music
endif
endef

RESULT := $(foreach SYMBOL, $(shell echo $(CFLAGS)), $(call symbol_in_cflags_check, $(SYMBOL), -DIN_MUSIC))

如果只是一个快速测试,那么在子目录Makefile中添加一行,如

echo ${CFLAGS} | grep MY_SYMBOL && echo "yes, it's there" || echo "no, not there"

当您进行make时应该会看到结果。

如果只是一个快速测试,请在子目录Makefile中添加一行,如

echo ${CFLAGS} | grep MY_SYMBOL && echo "yes, it's there" || echo "no, not there"
ifneq (,$(filter MY_SYMBOL,$(CFLAGS)))
# it is in CFLAGS, so do something
else
# it is NOT in CFLAGS, so do something else
endif

当您进行make时,您应该会看到结果。

您的第一种方法(
ifdef…
)适用于我,在GNUMake 3.81中。您使用的是哪个版本的Make?你能给我们举个完整的例子吗?等等。。。你是想测试
MY_SYMBOL
是否被定义,或者它是否在
CFLAGS
中?@Beta,是的,我想知道我的_SYMBOL(在第二种情况下是在音乐中)是否被添加到CFLAGS中,这样我就可以决定是否相应地编译一些源文件。你的第一种方法(
ifdef…
)在GNUMake 3.81中适用于我。您使用的是哪个版本的Make?你能给我们举个完整的例子吗?等等。。。你是想测试
MY_SYMBOL
是否已定义,还是在
CFLAGS
中?@Beta,是的,我想知道我的_SYMBOL(在第二种情况下是在音乐中)是否已添加到CFLAGS中,这样我就可以决定是否相应地编译一些源文件。我已经尝试过了,但不幸的是,CFLAGS中还定义了另一个名为MY_symbol_XXX的符号,因此findstring始终返回true。这就是为什么我尝试使用foreach并调用用户定义的函数。@dejunl:我应该想到这一点。更正我的答案。。。现在试试。我已经试过了,但不幸的是,还有另一个符号叫做MY_symbol_XXX,它也在CFLAGS中定义,所以findstring总是返回true。这就是为什么我尝试使用foreach并调用用户定义的函数。@dejunl:我应该想到这一点。更正我的答案。。。现在试试看。
ifneq (,$(filter MY_SYMBOL,$(CFLAGS)))
# it is in CFLAGS, so do something
else
# it is NOT in CFLAGS, so do something else
endif