条件测试中的自动变量:GNU Make

Sau*_*abh 5 makefile gnu-make

我有点被困在这里.我们有两个makefile(一个我无法改变的要求)

  • defs.mk:它包含源文件名及其额外的编译标志(除标准标志外),例如:
C_FILES = c/src/main/rule_main.c
rule_main_OPTIONAL_FLAG = +w127
rule_main_DEBUG = TRUE
  • Makefile:它包含所有规则.

现在我想添加一个工具,以便我可以定义文件特定的标志(和可选的文件特定的调试标志),如下所示:

CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为条件句中不支持自动变量的扩展.还有其他办法吗?

Ale*_*x B 5

我通常利用条件函数:

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))
Run Code Online (Sandbox Code Playgroud)

或者使用调用函数来定义我自己的函数:

debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)

%.o: src/$$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
Run Code Online (Sandbox Code Playgroud)