المتغيرات الأوتوماتيكية في اختبارات الشرطية: GNU تصنع

StackOverflow https://stackoverflow.com/questions/819700

  •  03-07-2019
  •  | 
  •  

سؤال

أنا عالق هنا. لدينا اثنين من 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 $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif

ولكن هذا لا يعمل لأن توسيع المتغيرات التلقائية غير مدعوم داخل الشرطية. هل هناك أي طريقة أخرى للقيام بذلك؟

هل كانت مفيدة؟

المحلول

عادة ما أستفيد من وظائف مشروطة:

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 $@))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top