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/07/04 10:40] – [Debug] : fix anglicisme root | prog:cmake [2024/12/12 11:33] (Version actuelle) – [Compilation] : ajout des options de compilation root | ||
---|---|---|---|
Ligne 12: | Ligne 12: | ||
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 | ||
Ligne 256: | Ligne 256: | ||
</ | </ | ||
- | ====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 `python | ||
+ | |||
+ | < | ||
+ | " | ||
+ | (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 334: | Ligne 395: | ||
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==== |
prog/cmake.1720082453.txt.gz · Dernière modification : 2024/07/04 10:40 de root