طريقة جيدة للقيام "بالتبديل" في ملف Makefile
-
03-07-2019 - |
سؤال
أقوم بتجربة نظام بناء محدث في العمل؛أحاول حاليًا العثور على طريقة جيدة لتعيين المترجم والأعلام اعتمادًا على النظام الأساسي المستهدف.
ما أود أن أفعله هو شيء من هذا القبيل
switch $(PLATFORM)_$(BUILD_TYPE)
case "Linux_x86_release"
CFLAGS = -O3
case "Linux_x86_debug"
CFLAGS = -O0 -g
case "ARM_release"
CC = armcc
AR = armlink
CFLAGS = -O2 -fx
...
وهو غير مدعوم بواسطة GNU Make.الآن، فكرتي الأولى كانت أن أفعل ذلك
-include $(PLATFORM)_$(BUILD_TYPE)
وهو حل لائق جدًا، ومع ذلك، فإنه يجعل من الصعب الحصول على نظرة عامة على الاختلافات بين الملفات، ناهيك عن أنني أتطلع إلى كتابة وصيانة 60-80 ملفًا جيدًا، يحتوي كل منها على مجموعة من التعريفات المتغيرة .
هل يعرف أي شخص طريقة أفضل لتحقيق ذلك؟أي.تعيين مجموعة من العلامات والخيارات الأخرى بناءً على متغير آخر؟
المحلول
قد يكون التبديل إلى نظام يقوم بذلك نيابةً عنك (automake/autoconf) أسهل...
نصائح أخرى
ماذا عن:
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
تكوين مثل هذه المعلمات سيكون مهمة أ configure
النصي.
ومع ذلك، يمكنك البحث في بناء الجملة لـ الشرطية و وظائف مشروطة.على سبيل المثال، يمكنك تجربة ما يلي:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif