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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top