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
Prochaine révision
Révision précédente
prog:cmake [2024/05/31 12:43] – [Utiliser clang] : précision sur CMAKE_LINKER_TYPE rootprog:cmake [2024/08/30 15:13] (Version actuelle) – Ajout des commandes externes aux targets root
Ligne 256: Ligne 256:
 </code> </code>
  
-====Cas spécifiques====+====Environnement de compilation et de sortie====
  
-===Exécuter une action qui n'est rattachée à aucun programme/target===+===Environnement de sortie===
  
-Il suffit de passer par une ''target'' intermédiaire.+<code cmake> 
 +if(WIN32) 
 +  set(OS "Windows"
 +elseif(UNIX AND NOT APPLE) 
 +  set(OS "Linux/Unix"
 +elseif(APPLE) 
 +  set(OS "macOS"
 +else() 
 +  set(OS "Unknown"
 +endif() 
 + 
 +if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
 +  set(ARCHITECTURE "64-bit"
 +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 
 +  set(ARCHITECTURE "32-bit"
 +else() 
 +  set(ARCHITECTURE "Unknown"
 +endif() 
 +</code> 
 + 
 +====Exécution d'une commande==== 
 + 
 +===En passant par une nouvelle target===
  
 <code cmake> <code cmake>
-# On crée une target qui sera ajoutée à la commande make par défaut. +add_custom_target(clang_fmt ALL COMMAND xxxxxx)
-add_custom_target(clang_fmt ALL+
-# On définir une commande à exécuter. +
-add_custom_command(TARGET clang_fmt COMMAND xxxxxx)+
 </code> </code>
  
-===Exécuter uniquement le préprocesseur===+===Associé une commande à une target existante===
  
-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.+  * En passant par une target intermédiaire
  
 <code cmake> <code cmake>
-add_library(file_obj OBJECT EXCLUDE_FROM_ALL file.cpp) +add_custom_target(clang_fmt_dep COMMAND ...) 
-add_custom_target(file ALL COMMAND make file.cpp.i)+ 
 +add_dependencies(clang_fmt clang_fmt_dep)
 </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}}+  * Sans passer par une target intermédiaire 
 + 
 +<code cmake> 
 +add_custom_command(TARGET clang_fmt PRE_BUILD COMMAND ...) 
 +</code> 
 + 
 +  * En passant par un fichier qui sera généré 
 + 
 +<code cmake> 
 +add_custom_command(OUTPUT file COMMAND ...) 
 + 
 +add_dependencies(clang_fmt file) 
 +</code> 
 + 
 +===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 334: 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====
Ligne 481: Ligne 556:
 [[https://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script|CMake: Print out all accessible variables in a script]] {{ :prog:cmake:cmake_print_out_all_accessible_variables_in_a_script_-_stack_overflow_18_08_2022_14_09_34_.html |Archive du 15/02/2012 le 18/08/2022}} [[https://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script|CMake: Print out all accessible variables in a script]] {{ :prog:cmake:cmake_print_out_all_accessible_variables_in_a_script_-_stack_overflow_18_08_2022_14_09_34_.html |Archive du 15/02/2012 le 18/08/2022}}
  
-  * Afficher toutes les étapes, line par line, d'un run ''CMake'' (configuration uniquement)+  * Afficher toutes les étapes, ligne par ligne, d'un run ''CMake'' (configuration uniquement)
  
 Ajouter l'option ''%%--%%trace-expand''. Ajouter l'option ''%%--%%trace-expand''.
prog/cmake.1717152209.txt.gz · Dernière modification : 2024/05/31 12:43 de root