comment mettre de la ligne de commande du compilateur args dans certains endroits à l'aide de cmake
Donc je suis en train de construire une bibliothèque partagée, de deux bibliothèques statiques.
Cette réponse dit que la façon de le faire est d'insérer -Wl,--whole-archive
avant mon bibliothèques statiques, la -Wl,--no-whole-archive
après eux.
Donc ce que j'ai dans cmake au moment de la bibliothèque partagée est:
add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus
${wtdbosqlite}
${WT_LIBRARIES}
${DB_LIBRARIES}
${Boost_LIBRARIES}
app models
)
Donc ce que j'ai besoin est d'ajouter la -Wl,--whole-archive
avant app
et models
, puis -Wl,--no-whole-archive
après (ainsi que la bibliothèque standard, les importations ne sont pas exportés par la partagé lib).
Quelle est la meilleure façon de le faire dans CMake ?
Plus: Donc je voudrais l'utiliser cmake choses autant que possible, de cette façon je n'ai pas à faire tout le, travail supplémentaire pour windows s'appuie, comme CMake gentiment supprime le compilateur définitions qui ne sont pas pris en charge sur la plate-forme en cours de construction.
OriginalL'auteur matiu | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
OK, c'était beaucoup plus facile que je ne le pensais.
Ainsi, selon le cmake docs:
Ainsi, le correctif était juste pour:
Je ne sais pas si ça va fonctionner sur windows ou pas, j'attends, il sera comme cmake est super intelligent.
En regardant le résultat avec objdump, il ne semble pas avoir beaucoup de boost des trucs dans les exportations, donc j'ai peut-être fait quelque chose de mal.
Mais il a les trucs que j'ai besoin de lien contre elle, c'est un pas en avant.
Toutes les autres réponses encore apprécié. Fondamentalement, ce que je suis en train de faire est le même que celui de la question:
CMake: comment créer une seule bibliothèque partagée de toutes les bibliothèques statiques de sous-projets?
empty.cpp
fichier?Non, j'utilise empty.cpp tout le temps.
Je regarde comme vous pouvez le faire
file(WRITE empty.cpp "")
si vous ne voulez pas polluer votre source réelle de l'arbre avec les fichiers inutiles.Dans le cas où votre compilateur n'aime pas à compiler vide fichiers cpp (message d'erreur), le sacrifice de quelques octets en binaire et remplacer les "" par quelque chose comme "int dummy = 0;".
OriginalL'auteur matiu
Si vous êtes à la construction de la statique des bibliothèques de vous-même, vous pouvez utiliser cette approche: https://stackoverflow.com/a/29824424/4069571 à savoir comme objet bibliothèques d'abord, puis en les reliant dans l'partagés et les bibliothèques statiques.
OriginalL'auteur GPMueller