هل من الممكن تحديد أعلام محددة/تحديد DLL/So Build؟
-
22-09-2019 - |
سؤال
كيف يمكنني تحديد بعض الأعلام الفريدة لـ DLL فقط. بشكل افتراضي يضيف libtool -DDLL_EXPORT
إنه أمر جيد بالنسبة لمعظم المشاريع التي تتبع اتفاقيات GNU ، ولكن إذا عملت ، على سبيل المثال ، مع زيادة ، قد أحتاج إلى تحديد أعلام المكتبة الخاصة بي: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK
بالنسبة للبناء DLL فقط ، وأيضًا أريد أيضًا بناء مشروط ، لذا أحتاج إلى بعض التعريفات المحددة لـ DLL/So Build.
لسوء الحظ ، لا يمكنني العثور على طريقة لكيفية القيام بذلك مع Libtool ، ما هي الأعلام التي يجب أن أستخدمها؟
ملاحظة: لا تحاول حتى أن تقترح الانتقال إلى Cmake.
مثال:
أستخدم مكتبة FOO التي تربط الشريط وتتطلب -dbar_exports للحصول على رموز للمكتبة الديناميكية فقط.
هل هناك شيء مثل
libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS
اي شخص؟
حل بديل: (قبيح للغاية)
إنشاء ملف `defines.h
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
وثم:
libfoo_la_CXXFLAGS += -include defines.h
قبيح ولكن يجب أن تعمل.
المحلول
يمكنك تعطيل بناء مكتبة مشتركة افتراضيًا
LT_INIT([disable-shared])
ثم يمكنك استخدام AM_CONDITIONAL
مدموج مع --enabled-shared
وتعيين التعريفات الإضافية إذا تم طلب المكتبة المشتركة بشكل صريح. IOW ، تمكين بناء ثابت أو مشترك ، ولكن ليس كلاهما في نفس الوقت.
نصائح أخرى
ليست جميلة ، ولكن هل يمكنك استخدام أ الشرط للتحقق مما إذا كان DLL_EXPORT محدد وما إذا كان يحدد الآخرين الذي تحتاجه؟
أنا لست جيدًا مع Autotools ، أنا أفضل cmake لكنك يبدو أنك ضد ذلك.