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

时间:2009-05-04 11:20:03

标签: 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

但由于条件限制不支持扩展自动变量,因此无法正常工作。还有其他办法吗?

1 个答案:

答案 0 :(得分:5)

我通常会利用conditional functions

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))

或使用call function定义我自己的功能:

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

%.o: src/$$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))