Ceci est une ancienne révision du document !
Table des matières
Configuration
Exécution de cmake
toolset
Visual Studio | toolset |
---|---|
80 | 2005 |
90 | 2008 |
100 | 2010 |
110 | 2012 |
120 | 2013 |
140 | 2015 |
141 | 2017 |
142 | 2019 |
143 | 2022 |
Puis appeler
cmake -T v142 -G "Visual Studio 16 2019"
Il faut bien mettre les deux. Sinon, l'erreur suivante risque d'arriver :
$ cmake .. -T version=v142 -- Building for: Visual Studio 17 2022
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.
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
How to configure cmake in a way that it generates Visual Studio 2013+ project files with /MP option 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.
Théorie à confirmer
Exécution
- Exécution en parallèle des projets
L'activation de la compilation en parallèle des projets désactive la compilation en parallèle des fichiers source.
cmake --build: --parallel when used with msbuild does not enable parallelism within a project Archive du 09/04/2020 le 22/08/2022
Pour activer la compilation en parallèle des fichiers source en ligne de commande, il est possible d'utiliser (pour Visual Studio seulement) :
cmake --build . -- /p:CL_MPcount=8
Messages d'erreur
RuntimeLibrary
,MTd_StaticDebug
etMDd_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 CMAKE_MSVC_RUNTIME_LIBRARY (et ajuster) au CMakeLists.txt
racine (cmake minimum 3.15):
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
Setting the MSVC runtime in CMake 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.
Debug Assertion Failed! Expression: __acrt_first_block == header Archive du 10/02/2016 le 10/04/2021