Можно ли указать конкретные флаги / define для DLL / SO build?
-
22-09-2019 - |
Вопрос
Как я могу указать некоторые уникальные флаги для сборок только для 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, но вы, кажется, категорически против этого.