المتغيرات الأوتوماتيكية في اختبارات الشرطية: GNU تصنع
سؤال
أنا عالق هنا. لدينا اثنين من 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 $@))
لا تنتمي إلى StackOverflow