prog:cmake
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| prog:cmake [2024/04/05 11:21] – [Utiliser clang] : ajout du linker de clang root | prog:cmake [2025/12/11 10:36] (Version actuelle) – [Compilation] : précision sur les versions à installer de CMake root | ||
|---|---|---|---|
| Ligne 7: | Ligne 7: | ||
| '' | '' | ||
| - | Compilation | + | * CMake préinstallé |
| + | |||
| + | La compilation nécessite d' | ||
| <code bash> | <code bash> | ||
| git clone https:// | git clone https:// | ||
| cd cmake | cd cmake | ||
| - | cmake -B build | + | cmake -B build -DCMAKE_USE_OPENSSL: |
| cmake --build build --parallel 16 | cmake --build build --parallel 16 | ||
| sudo cmake --install build | sudo cmake --install build | ||
| </ | </ | ||
| - | La méthode | + | Suite des versions à installer : 3.6 > 3.13 > 3.31 > 4... |
| + | |||
| + | * Bootstrap | ||
| + | |||
| + | La méthode '' | ||
| [[https:// | [[https:// | ||
| Ligne 43: | Ligne 49: | ||
| [[https:// | [[https:// | ||
| </ | </ | ||
| + | |||
| + | * Effacer le cache et regénérer les CMakeLists.txt | ||
| + | |||
| + | Il faut effacer le fichier '' | ||
| + | |||
| + | * Options de debug de CMake | ||
| + | |||
| + | Ajouter '' | ||
| * Différences entre les générateurs | * Différences entre les générateurs | ||
| Ligne 52: | Ligne 66: | ||
| '' | '' | ||
| - | '' | + | '' |
| ====Cross compilation pour Android==== | ====Cross compilation pour Android==== | ||
| Ligne 81: | Ligne 95: | ||
| <code cmake> | <code cmake> | ||
| - | add_library(Librairie | + | add_library(Librairie) |
| add_library(NameSpace:: | add_library(NameSpace:: | ||
| set(Librairie_SRC ${CMAKE_CURRENT_SOURCE_DIR}/ | set(Librairie_SRC ${CMAKE_CURRENT_SOURCE_DIR}/ | ||
| Ligne 180: | Ligne 194: | ||
| -DCMAKE_C_COMPILER=/ | -DCMAKE_C_COMPILER=/ | ||
| </ | </ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | Ne pas spécifier '' | ||
| + | |||
| + | Sinon, il est aussi possible de mettre l' | ||
| ===FetchContent=== | ===FetchContent=== | ||
| Ligne 246: | Ligne 266: | ||
| </ | </ | ||
| - | ====Cas spécifiques==== | + | ====Environnement de compilation et de sortie==== |
| - | ===Exécuter une action qui n'est rattachée à aucun programme/ | + | ===Environnement de sortie=== |
| - | Il suffit de passer | + | <code cmake> |
| + | if(WIN32) | ||
| + | set(OS " | ||
| + | elseif(UNIX AND NOT APPLE) | ||
| + | set(OS " | ||
| + | elseif(APPLE) | ||
| + | set(OS " | ||
| + | else() | ||
| + | set(OS " | ||
| + | endif() | ||
| + | |||
| + | if(CMAKE_SIZEOF_VOID_P EQUAL 8) | ||
| + | set(ARCHITECTURE " | ||
| + | elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) | ||
| + | set(ARCHITECTURE " | ||
| + | else() | ||
| + | set(ARCHITECTURE " | ||
| + | endif() | ||
| + | </ | ||
| + | |||
| + | ====Exécution d'une commande==== | ||
| + | |||
| + | ===En passant | ||
| <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 | + | |
| </ | </ | ||
| - | ===Exécuter uniquement le préprocesseur=== | + | ===Associé une commande à une target existante=== |
| - | Il faut créer | + | * 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 |
| - | add_custom_target(file ALL COMMAND | + | |
| + | add_dependencies(clang_fmt clang_fmt_dep) | ||
| </ | </ | ||
| - | [[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/ | + | * 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, | ||
| + | |||
| + | 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 " | ||
| + | set(IGNORE_ERROR_IN_LOG ">" | ||
| + | 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 '' | ||
| + | |||
| + | < | ||
| + | " | ||
| + | (CustomBuild target) | ||
| + | CUSTOMBUILD : error : pip's dependency resolver does not currently take into account all the packages that are installed. This 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, | ||
| + | |||
| + | 15 Warning(s) | ||
| + | 2 Error(s) | ||
| + | </code> | ||
| ===Dépendances dans un sous-dossier=== | ===Dépendances dans un sous-dossier=== | ||
| Ligne 324: | Ligne 405: | ||
| DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ | ||
| </ | </ | ||
| + | |||
| + | ====Divers==== | ||
| + | |||
| + | ===Exécuter uniquement le préprocesseur=== | ||
| + | |||
| + | Il faut créer une target compilable en l' | ||
| + | |||
| + | <code cmake> | ||
| + | add_library(file_obj OBJECT EXCLUDE_FROM_ALL file.cpp) | ||
| + | add_custom_target(file ALL COMMAND make file.cpp.i) | ||
| + | </ | ||
| + | |||
| + | [[http:// | ||
| + | |||
| ====Tests==== | ====Tests==== | ||
| Ligne 445: | Ligne 540: | ||
| | | ||
| - | Si les valeurs sont correctement remplies sous l' | + | Si les valeurs sont correctement remplies sous l' |
| <code cmake> | <code cmake> | ||
| Ligne 471: | Ligne 566: | ||
| [[https:// | [[https:// | ||
| - | * Afficher toutes les étapes, | + | * Afficher toutes les étapes, |
| Ajouter l' | Ajouter l' | ||
prog/cmake.1712308887.txt.gz · Dernière modification : de root
