2010-01-01 1 views
2

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

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

P.S .: Даже не пытайтесь предложить перейти на 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 

Гадкий но должно работать.

ответ

0

Вы можете отключить здание разделяемые библиотеки по умолчанию с

LT_INIT([disable-shared]) 

, то вы можете использовать AM_CONDITIONAL в сочетании с --enabled-shared и установить дополнительные определения, если общая библиотека явно требуется. IOW, позволяют создавать статические или общие, но не оба одновременно.

+0

Нет ли другого пути? – Artyom

+0

@Artyom Возможно, есть, но я не знаю об этом. Я использую Autotools только в Unix, и я не использую его для Windows для создания DLL. – mloskot

0

Не так ли, но можете ли вы использовать conditional, чтобы определить, определен ли DLL_EXPORT, и если он определяет другие, которые вам нужны?

Я не так хорош с autotools, я предпочитаю CMake, но вы, похоже, против этого.

+0

'am_conditional' - это глобальный проект, но, как правило, при создании с помощью libtool вы создаете как статическую, так и общую библиотеку. Так что это не настоящее решение. – Artyom