سؤال

أقوم بتجربة نظام بناء محدث في العمل؛أحاول حاليًا العثور على طريقة جيدة لتعيين المترجم والأعلام اعتمادًا على النظام الأساسي المستهدف.

ما أود أن أفعله هو شيء من هذا القبيل

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

ال ملف تعريف استعمل من قبل شخص سخيف يعد مثالًا جيدًا لـ Makefile الذي يقوم بمهام التكوين غير التافهة في Makefile نفسه (مثل تشغيل نوع المضيف).إنها في الواقع سهلة القراءة وسهلة الاستخدام إلى حد معقول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top