Je sais comment passer les options du compilateur à l'aide de la commande cmake
set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")
Existe-t-il également un moyen de passer les options depuis la ligne de commande, qui remplacerait les options CMakeList.txt, quelque chose comme:
cmake -Wl,-rpath=/home/abcd/newlibs/ path/to/CMakeLists.txt
ou
cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
Mon problème principal est que je veux savoir comment ajouter des indicateurs et comment remplacer les indicateurs existants du compilateur à partir de la ligne de commande.
Oui, vous pouvez ajouter les options du compilateur et de l'éditeur de liens. Mais il faut distinguer deux choses dans CMake: le premier appel pour générer l’environnement de construction et tous les appels consécutifs pour la régénération de cet environnement de construction après les modifications apportées à votre CMakeList.txt
fichiers ou dépendances.
Voici certaines des possibilités (à l’exclusion des plus complexes chaîne d’outils variantes):
Le contenu initial de la mémoire cache CMAKE_CXX_FLAGS
variable est une combinaison de CMAKE_CXX_FLAGS_INIT
défini par CMake lui-même lors de la détection du système d’exploitation/de la chaîne d’outils et de ce qui est défini dans la variable d’environnement CXXFLAGS
. Vous pouvez donc appeler initialement:
cmake -E env CXXFLAGS="-Wall" cmake ..
Plus tard, CMake s’attendrait à ce que l’utilisateur modifie le CMAKE_CXX_FLAGS
variable en cache directement pour ajouter des objets, par exemple. en utilisant un éditeur comme ccmake
commettez avec CMake.
Vous pouvez facilement introduire votre propre type de construction comme ALL_WARNINGS
. Les pièces spécifiques au type de construction sont ajoutées:
cmake -DCMAKE_CXX_FLAGS_ALL_WARNINGS:STRING="-Wall" -DCMAKE_BUILD_TYPE=ALL_WARNINGS ..
Les options de l'éditeur de liens sont plus ou moins équivalentes aux options du compilateur. Les noms de variable de CMake dépendent du type de cible (EXE
, SHARED
ou MODULE
).
Le CMAKE_EXE_LINKER_FLAGS_INIT
, CMAKE_SHARED_LINKER_FLAGS_INIT
ou CMAKE_MODULE_LINKER_FLAGS_INIT
se combine avec la variable d’environnement LDFLAGS
à CMAKE_EXE_LINKER_FLAGS
, CMAKE_SHARED_LINKER_FLAGS
et CMAKE_MODULE_LINKER_FLAGS
.
Vous pouvez donc appeler par exemple:
cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake ..
Voir au dessus.
Les pièces spécifiques au type de construction sont ajoutées:
cmake -DCMAKE_SHARED_LINKER_FLAGS_MY_RPATH:STRING="-rpath=/home/abcd/libs/" -DCMAKE_BUILD_TYPE=MY_RPATH ..
Sachez simplement que CMake fournit une variable spéciale pour définir les indicateurs de fournisseur/lieur de manière indépendante de la plate-forme. Vous n'avez donc pas besoin de connaître l'option spécifique du compilateur/éditeur de liens.
Voici quelques exemples:
Malheureusement, il n'y en a pas pour le niveau d'alerte du compilateur ( encore )
cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
cela devrait fonctionner, le problème est que si vous trouvez_package () un paquet qui modifie également CMAKE_CXX_FLAGS, cela ne fonctionnera pas seulement partiellement.