Pergunta

Como posso especificar alguns sinalizadores exclusivos apenas para a DLL. Por padrão, a libtool adiciona -DDLL_EXPORT O que é bom para a maioria dos projetos que seguem as convenções da GNU, mas se eu trabalhar, por exemplo, com Boost, talvez seja necessário especificar para as bandeiras da minha biblioteca: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK Para compilações apenas da DLL, às vezes também quero construções condicionais, por isso preciso de algumas defines específicas para DLL/SO Build.

Infelizmente, não consigo encontrar uma maneira de fazer isso com o Libtool, quais bandeiras devo usar?

PS: Nem tente sugerir se mudar para o cmake.

Exemplo:

Eu uso a biblioteca Foo que vincula a barra e requer -dbar_exports para obter símbolos apenas para biblioteca dinâmica.

Há algo como

 libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS

Qualquer pessoa?

Solução alternativa: (bastante feio)

Crie um arquivo `define.h

#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif

E depois:

 libfoo_la_CXXFLAGS += -include defines.h

Feio, mas deve funcionar.

Foi útil?

Solução

Você pode desativar a construção da biblioteca compartilhada por padrão com

LT_INIT([disable-shared])

Então você pode usar AM_CONDITIONAL combinado com --enabled-shared e defina as definições extras se a biblioteca compartilhada for explicitamente solicitada. Iow, habilite a construção estática ou compartilhada, mas não ambos ao mesmo tempo.

Outras dicas

Não tão bonito, mas você poderia usar um condicional Para verificar se o dll_export está definido e se é definido os outros que você precisa?

Não sou tão bom com o AutoTools, prefiro cmake, mas você parece bastante contra isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top