بناء النظام وقابلية القابلية
-
22-08-2019 - |
سؤال
أنا أتساءل كيف يمكنني إجراء نظام بناء محمول (خطوة بخطوة)، وأستطيع حاليا استخدام cmake لأنه كان من السهل إعداده في المقام الأول، مع هدف قوس واحد فقط، ولكن الآن يجب أن حزمة مكتبة أتساءل أنا أتساءل كيف هي أفضل طريقة لجعلها محمولة للقوس أنا اختبار.
أعلم أنني بحاجة إلى config.h لتحديد الأشياء اعتمادا على القوس ولكني لا أعرف كيف يمكن أن يكون هذا التلقائي.
أي طريقة أخرى للحصول على نظام البناء موضع ترحيب بحرارة!
المحلول
يمكنك فقط استخدام CMAKE، إنه واضح للغاية.
تحتاج هذه الأشياء:
أولا، يعني معرفة تفاصيل التكوين. على سبيل المثال، إذا كنت تعرف أن بعض الوظائف تسمى بشكل مختلف على بعض النظام الأساسي، يمكنك استخدامها TRY_COMPILE
لاكتشاف ذلك:
TRY_COMPILE(HAVE_ALTERNATIVE_FUNC
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/alternative_function_test.cpp
CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx
)
أين alternative_function_test.cpp
هو ملف في الدليل المصدر الخاص بك يجمع فقط مع التعريف البديل.
هذا سوف يحدد المتغير HAVE_ALTERNATIVE_FUNC
إذا نجحت الترجمة.
ثانيا، تحتاج إلى جعل هذا التعريف يؤثر على مصادرك. إما يمكنك إضافته إلى تجميع الأعلام
IF(HAVE_TR1_RANDOM)
ADD_DEFINITIONS(-DHAVE_TR1_RANDOM)
ENDIF(HAVE_TR1_RANDOM)
أو يمكنك صنع config.h
ملف. خلق config.h.in
مع السطر التالي
#cmakedefine HAVE_ALTERNATIVE_FUNCS
وإنشاء أ config.h
ملف حسب هذا الخط في CMakeLists.txt
(يرى CONFIGURE_FILE
)
CONFIGURE_FILE(config.h.in config.h @ONLY)
ال #cmakedefine
سوف ترجم إلى #define
أو #undef
اعتمادا على متغير cmake.
راجع للشغل، لاختبار اداننس، انظر هذا البريد
نصائح أخرى
لقد كنت أستخدم Toolchain GNU Autoconf / Automake الذي عمل جيدا بالنسبة لي حتى الآن. أنا فقط تركز حقا على Linux / X86 (و 64 بت) وماك، وهو أمر مهم إذا كنت تقوم ببناء على PowerPC، بسبب قضايا الإناهة.
باستخدام Autoconf، يمكنك التحقق من النظام الأساسي المضيف باستخدام الماكرو:
AC_CANONICAL_HOST
والتحقق من الانتصاف باستخدام:
AC_C_BIGENDIAN
سيقوم Autoconf بعد ذلك بإضافة تعريفات إلى Config.H التي يمكنك استخدامها في التعليمات البرمجية الخاصة بك.
أنا لست متأكدا (لم أحاول أبدا) مدى جودة عمل GNU Autools على Windows، لذلك إذا كان Windows هو أحد أهدافك، فقد تكون أفضل من العثور على وظيفة مماثلة لنظام إنشاء CMAKE الحالي الخاص بك.
للحصول على التمهيدي الجيد على autotools، إلقاء نظرة هنا:
http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool.