Можно ли указать конкретные флаги / define для DLL / SO build?

StackOverflow https://stackoverflow.com/questions/1988685

Вопрос

Как я могу указать некоторые уникальные флаги для сборок только для DLL?По умолчанию libtool добавляет -DDLL_EXPORT это нормально для большинства проектов, которые следуют соглашениям GNU, но если я работаю, например, с Boost, мне может потребоваться указать для моей библиотеки флаги: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK для сборок только DLL, также иногда я хочу условные сборки, поэтому мне нужны некоторые конкретные определения для сборки DLL / SO.

К сожалению, я не могу найти способ, как это сделать с помощью libtool, какие флаги мне следует использовать?

P.S.: Даже не пытайтесь предлагать перейти на CMake.

Пример:

Я использую библиотеку foo, которая ссылается на bar и требует -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