2009-05-04 10 views
5

मैं यहां फंस गया हूं। हम दो makefiles (एक आवश्यकता है कि मैं नहीं बदल सकते)सशर्त के परीक्षणों में स्वचालित चर: जीएनयू

  • 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

संबंधित मुद्दे