Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
prog:cmake:vs [2019/09/24 09:53] – ↷ Page déplacée et renommée de prog:cmake_vs à prog:cmake:vs root | prog:cmake:vs [2024/12/10 22:25] (Version actuelle) – [Exécution de cmake] : mise à jour de Générateur root |
---|
| =====Configuration===== |
====Exécution de cmake==== | ====Exécution de cmake==== |
* toolset : | |
| * Toolset (''-T'') |
| |
^Visual Studio^toolset^ | ^Visual Studio^toolset^ |
|141 |2017 | | |141 |2017 | |
|142 |2019 | | |142 |2019 | |
| |143 |2022 | |
| |
| Il est aussi possible de spécifier l'architecture du host (du compilateur) et sa version: ''v143,version=14.36.17.6,host=x64'' |
| |
| [[https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_TOOLSET.html#variable:CMAKE_GENERATOR_TOOLSET|CMAKE_GENERATOR_TOOLSET]] {{ :prog:cmake:vs:cmake_generator_toolset_cmake_3.31.2_documentation_10_12_2024_22_23_40_.html |Archive du 3.31.2 le 10/12/2024}} |
| |
| * Architecture (''-A'') |
| |
| Liste des possibilités: ''x64'', ''Win32'', ''ARM'', ''ARM64''. |
| |
| * Générateur (''-G'') |
| |
| ^Générateur^ |
| |''Visual Studio 6''| |
| |''Visual Studio 7''| |
| |''Visual Studio 7 .NET 2003''| |
| |''Visual Studio 8 2005''| |
| |''Visual Studio 9 2008''| |
| |''Visual Studio 10 2010''| |
| |''Visual Studio 11 2012''| |
| |''Visual Studio 12 2013''| |
| |''Visual Studio 14 2015''| |
| |''Visual Studio 15 2017''| |
| |''Visual Studio 16 2019''| |
| |''Visual Studio 17 2022''| |
| |
| |
Puis appeler | Puis appeler |
| |
cmake -T v142 | <code bash> |
| cmake -T v142 -G "Visual Studio 16 2019" -A x64 |
| </code> |
| |
| Il faut bien mettre les trois. Sinon, l'erreur suivante risque d'arriver : |
| |
| <code> |
| $ cmake .. -T version=v142 |
| -- Building for: Visual Studio 17 2022 |
| </code> |
| |
[[https://gitlab.kitware.com/cmake/cmake/blob/master/Help/variable/MSVC_TOOLSET_VERSION.rst|MSVC_TOOLSET_VERSION]] {{ :prog:cmake:msvc_toolset_version.txt |Archive du 20/09/2019}} | [[https://gitlab.kitware.com/cmake/cmake/blob/master/Help/variable/MSVC_TOOLSET_VERSION.rst|MSVC_TOOLSET_VERSION]] {{ :prog:cmake:msvc_toolset_version.txt |Archive du 20/09/2019}} |
| |
====Activer la compilation multiprocesseur /MP==== | [[https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html|cmake-generators]] {{ :prog:cmake:vs:cmake-generators_7_cmake_3.31.2_documentation_10_12_2024_22_18_04_.html |Archive du v3.31.2 le 10/12/2024}} |
| ====CMakeLists.txt==== |
| |
| * Activer la compilation multiprocesseur /MP |
| |
| Cela active la compilation en parallèle des fichiers sources. Pas la compilation en parallèle des projets. |
| |
<code> | <code> |
</code> | </code> |
| |
[[https://stackoverflow.com/questions/33858455/how-to-configure-cmake-in-a-way-that-it-generates-visual-studio-2013-project-fi|How to configure cmake in a way that it generates Visual Studio 2013+ project files with /MP option]] {{ :prog:proc:cmake:vs:how_to_configure_cmake_in_a_way_that_it_generates_visual_studio_2013_project_files_with_mp_option_-_stack_overflow_2019-09-24_09_52_43_.html |Archive du 24/09/2019}} | [[https://stackoverflow.com/questions/33858455/how-to-configure-cmake-in-a-way-that-it-generates-visual-studio-2013-project-fi|How to configure cmake in a way that it generates Visual Studio 2013+ project files with /MP option]] {{ :prog:cmake:vs:how_to_configure_cmake_in_a_way_that_it_generates_visual_studio_2013_project_files_with_mp_option_-_stack_overflow_2019-11-29_20_31_20_.html |Archive du 22/11/2015 le 29/11/2019}} |
| |
| * ''target_include_directories'' |
| |
| L'utilisation de l'option ''SYSTEM'' permet de désactiver les warnings venant des ''include'' "système". Seulement, Visual Studio ne fera pas non plus d'indexation des entêtes ''*.h'' / ''*.hpp'' dans ces sous-dossiers. |
| |
| <WRAP center round important 60%> |
| Théorie à confirmer |
| </WRAP> |
| |
| =====Exécution===== |
| |
| * Exécution en parallèle des projets |
| |
| <WRAP center round important 60%> |
| L'activation de la compilation en parallèle des projets désactive la compilation en parallèle des fichiers source. |
| |
| [[https://gitlab.kitware.com/cmake/cmake/-/issues/20564|cmake --build: --parallel when used with msbuild does not enable parallelism within a project]] {{ :prog:cmake:vs:cmake_--build_--parallel_when_used_with_msbuild_does_not_enable_parallelism_within_a_project_20564_issues_cmake_cmake_gitlab_22_08_2022_12_17_14_.html |Archive du 09/04/2020 le 22/08/2022}} |
| </WRAP> |
| |
| Pour activer la compilation en parallèle des fichiers source en ligne de commande, il est possible d'utiliser (pour Visual Studio seulement) : |
| |
| <code bash> |
| cmake --build . -- /p:CL_MPcount=8 |
| </code> |
| |
| =====Messages d'erreur===== |
| |
| * ''RuntimeLibrary'', ''MTd_StaticDebug'' et ''MDd_DynamicDebug'' |
| |
| Normalement, si les fichiers ''CMakeLists.txt'' sont bien fait, le générateur de projet ''Visual Studio'' de ''CMake'' devrait correctement mettre les bonnes valeurs par défaut. |
| |
| error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MTd_StaticDebug' ne correspond pas à la valeur 'MDd_DynamicDebug' in xxx.obj |
| error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in xxx.obj |
| |
| C'est que les deux fichiers objets non pas été compilé avec le même paramètre ''/M'' (''/MD'', ''/MT'', ''/MDd'', ''/MTd''). |
| |
| Solution : ajouter [[https://cmake.org/cmake/help/git-stage/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html|CMAKE_MSVC_RUNTIME_LIBRARY]] (et ajuster) au ''CMakeLists.txt'' racine (cmake minimum 3.15): |
| |
| <code cmake> |
| set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") |
| </code> |
| |
| [[https://stackoverflow.com/questions/10113017/setting-the-msvc-runtime-in-cmake|Setting the MSVC runtime in CMake]] {{ :prog:cmake:vs:visual_studio_-_setting_the_msvc_runtime_in_cmake_-_stack_overflow_2021-04-10_21_54_38_.html |Archive du 11/04/2012 le 10/04/2021}} |
| |
| * ''%%__%%acrt_first_block == header'' |
| |
| Ici, c'est l'inverse du paragraphe précédent. Il faut désactiver la ligne ''CMAKE_MSVC_RUNTIME_LIBRARY''. |
| |
| Bref... Il faut faire bien attention à ce que toutes les librairies soient compilées avec les mêmes options. |
| |
| [[https://stackoverflow.com/questions/35310117/debug-assertion-failed-expression-acrt-first-block-header|Debug Assertion Failed! Expression: __acrt_first_block == header]] {{ :prog:cmake:vs:c_-_debug_assertion_failed_expression_acrt_first_block_header_-_stack_overflow_2021-04-10_21_54_28_.html |Archive du 10/02/2016 le 10/04/2021}} |