Outils pour utilisateurs

Outils du site


prog:cmake

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
prog:cmake [2024/08/26 12:12] – Ajout de "Environnement de sortie" rootprog:cmake [2024/08/30 15:13] (Version actuelle) – Ajout des commandes externes aux targets root
Ligne 280: Ligne 280:
 </code> </code>
  
-====Cas spécifiques====+====Exécution d'une commande====
  
-===Exécuter une action qui n'est rattachée à aucun programme/target===+===En passant par une nouvelle target===
  
-Il suffit de passer par une ''target'' intermédiaire.+<code cmake> 
 +add_custom_target(clang_fmt ALL COMMAND xxxxxx) 
 +</code> 
 + 
 +===Associé une commande à une target existante=== 
 + 
 +  * En passant par une target intermédiaire
  
 <code cmake> <code cmake>
-# On crée une target qui sera ajoutée à la commande make par défaut. +add_custom_target(clang_fmt_dep COMMAND ...
-add_custom_target(clang_fmt ALL+ 
-# On définir une commande à exécuter. +add_dependencies(clang_fmt clang_fmt_dep)
-add_custom_command(TARGET clang_fmt COMMAND xxxxxx)+
 </code> </code>
  
-===Exécuter uniquement le préprocesseur===+  * Sans passer par une target intermédiaire
  
-Il faut créer une target compilable en l'excluant de ''all''Cela va créer des target intermédiaire, notamment ''xxx.cpp.i''. Il suffit alors de l'exécuter explicitement.+<code cmake> 
 +add_custom_command(TARGET clang_fmt PRE_BUILD COMMAND ...
 +</code> 
 + 
 +  * En passant par un fichier qui sera généré
  
 <code cmake> <code cmake>
-add_library(file_obj OBJECT EXCLUDE_FROM_ALL file.cpp+add_custom_command(OUTPUT file COMMAND ...) 
-add_custom_target(file ALL COMMAND make file.cpp.i)+ 
 +add_dependencies(clang_fmt file)
 </code> </code>
  
-[[http://anadoxin.org/blog/generating-preprocessed-sources-in-cmake-projects.html|Generating preprocessed sources in CMake projects]{{ :prog:cmake:generating_preprocessed_sources_in_cmake_projects_-_antek_s_tech_blog_2020-07-21_18_01_14_.html |Archive du 21/11/2018 le 21/07/2020}}+===Spécificité au générateur Visual Studio=== 
 + 
 +Normalement, une commande échoue si elle ne renvoie pas 0. 
 + 
 +Mais Visual Studio va également analyser la sortie standard. Si le contenu de la sortie standard est faussement considéré comme une erreur, il faut rediriger la sortie standard vers NUL. 
 + 
 +<code cmake> 
 +if(CMAKE_GENERATOR MATCHES "Visual Studio"
 +  set(IGNORE_ERROR_IN_LOG ">" "NUL" "2>&1"
 +else() 
 +  set(IGNORE_ERROR_IN_LOG ""
 +endif() 
 + 
 +  add_custom_target(targ COMMAND ... ${IGNORE_ERROR_IN_LOG}) 
 +
 +</code> 
 + 
 +Ce problème peut se produire en lançant la commande `python -m ensurepip` car elle lance la sous-commande `pip install` et cette commande peut générer l'erreur : 
 + 
 +<code> 
 +"...\target.vcxproj" (default target) (5) -
 +(CustomBuild target) ->  
 +  CUSTOMBUILD : error : pip's dependency resolver does not currently take into account all the packages that are installedThis behaviour is the source of the following dependency conflicts. [...\target.vcxproj] 
 +  C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(254,5)error MSB8066Custom build for '...\file.rule;...\target.rule;...\CMakeLists.txt' exited with code -1[...\target.vcxproj] 
 + 
 +    15 Warning(s) 
 +    2 Error(s) 
 +</code>
  
 ===Dépendances dans un sous-dossier=== ===Dépendances dans un sous-dossier===
Ligne 358: Ligne 395:
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}-${version})   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}-${version})
 </code> </code>
 +
 +====Divers====
 +
 +===Exécuter uniquement le préprocesseur===
 +
 +Il faut créer une target compilable en l'excluant de ''all''. Cela va créer des target intermédiaire, notamment ''xxx.cpp.i''. Il suffit alors de l'exécuter explicitement.
 +
 +<code cmake>
 +add_library(file_obj OBJECT EXCLUDE_FROM_ALL file.cpp)
 +add_custom_target(file ALL COMMAND make file.cpp.i)
 +</code>
 +
 +[[http://anadoxin.org/blog/generating-preprocessed-sources-in-cmake-projects.html|Generating preprocessed sources in CMake projects]] {{ :prog:cmake:generating_preprocessed_sources_in_cmake_projects_-_antek_s_tech_blog_2020-07-21_18_01_14_.html |Archive du 21/11/2018 le 21/07/2020}}
 +
  
 ====Tests==== ====Tests====
prog/cmake.txt · Dernière modification : 2024/08/30 15:13 de root