Est-il possible de spécifier des drapeaux spécifiques / définir pour DLL / SO construire?
-
22-09-2019 - |
Question
Comment puis-je spécifier des drapeaux uniques pour DLL construit uniquement. Par défaut libtool ajoute -DDLL_EXPORT
qui est très bien pour la plupart des projets qui suivent les conventions GNU, mais si je travaille, par exemple, avec Boost je besoin de spécifier pour mes drapeaux de bibliothèque: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK
pour DLL construit uniquement, parfois je veux conditionnelle builds donc je besoin de quelques DLL spécifiques pour définit / SO construire.
Malheureusement, je ne peux pas trouver un moyen comment faire avec libtool, quels drapeaux dois-je utiliser?
P.S:.. Ne pas essayer même de proposer de passer à CMake
Exemple:
J'utilise la bibliothèque foo qui relie à la barre et nécessite -DBAR_EXPORTS pour obtenir des symboles pour bibliothèque dynamique uniquement.
Y at-il quelque chose comme
libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS
Tout le monde?
Solution alternative: (assez moche)
Créez un fichier `defines.h
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
Et puis:
libfoo_la_CXXFLAGS += -include defines.h
laid, mais devrait fonctionner.
La solution
Vous pouvez désactiver la construction bibliothèque partagée par défaut avec
LT_INIT([disable-shared])
vous pouvez utiliser AM_CONDITIONAL
combiné avec --enabled-shared
et définissez les définitions supplémentaires si la bibliothèque partagée est explicitement demandée. OIEau, permettent la construction statique ou partagée, mais pas les deux en même temps.
Autres conseils
Non pas que jolie, mais pourriez-vous utiliser un conditionnelle pour vérifier si DLL_EXPORT est définie et si elle est de définir les autres dont vous avez besoin?
Je ne suis pas bon avec autotools, je préfère CMake mais vous semblez tout à fait contre cela.