5

我有点卡在这里。我们有两个 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

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

4

1 回答 1

5

我通常利用条件函数

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

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

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

%.o: src/$$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
于 2009-05-04T11:51:35.400 回答