Outils pour utilisateurs

Outils du site


prog:cmake:vs

Configuration

Exécution de cmake

  • toolset
Visual Studiotoolset
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

MSVC_TOOLSET_VERSION Archive du 20/09/2019

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 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 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

prog/cmake/vs.txt · Dernière modification : 2023/10/16 11:43 de root