سؤال

كيف يمكنني تحديد بعض الأعلام الفريدة لـ 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 لكنك يبدو أنك ضد ذلك.

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