2009-05-04 58 views
5

我有点卡在这里。我们有两个生成文件(即我不能改变的需求)的在条件测试中的自动变量:GNU Make

  • 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 [email protected]))_DEBUG) ## rule_main_DEBUG macro from defs.mk 
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE) 
    do something 
endif 

但是这一点,因为自动变量的扩张是不工作在条件中不受支持。有没有其他方法可以做到这一点?

回答

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 [email protected])) 
+0

谢谢你,条件职能的工作作为一个魅力。 - Saurabh – Saurabh 2009-05-04 12:52:31