É possível especificar sinalizadores específicos/definir para dll/então construir?
-
22-09-2019 - |
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.
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.