Windows avec MSVC
vcpkg inclut des triplets pour la création d’applications de bureau Windows à l’aide du compilateur MSVC cl.exe
.
Architecture | triplets vcpkg | Community |
---|---|---|
x64 | x64-windows | |
x64-windows-release | Oui | |
x64-windows-static | ||
x64-windows-static-md | Oui | |
x64-windows-static-release | Oui | |
x86 | x86-windows | |
x86-windows-static | Oui | |
x86-windows-static-md | Oui | |
arm | arm-windows | Oui |
arm-windows-static | Oui | |
arm64 | arm64-windows | |
arm64-windows-static | Oui | |
arm64-windows-static-md | Oui | |
arm64-windows-static-release | Oui | |
arm64ec | arm64ec-windows | Oui |
Les static
triplets de liaison sont définis pour utiliser le runtime MSVC en tant que bibliothèque statique (par exemple VCPKG_CRT_LINKAGE static
).
Les static-md
triplets de liaison sont définis pour utiliser le runtime MSVC en tant que DLL (par exemple). VCPKG_CRT_LINKAGE dynamic
Il s’agit de la solution recommandée pour redistribuer le runtime MSVC par Microsoft Learn.
Par défaut, vcpkg utilise la dernière version de Visual Studio installée sur le système pour générer du code. Pour sélectionner une version spécifique, créez une superposition de triplet ou triplet personnalisée à définir VCPKG_PLATFORM_TOOLSET
.
Par exemple, cela force l’utilisation de l’ensemble d’outils Visual Studio 2017.
set(VCPKG_PLATFORM_TOOLSET v141)
Le runtime Microsoft Visual C/C++ est « compatible binaire avant ». Cela signifie que vous pouvez générer du code avec Visual Studio 2015 Update 3, Visual Studio 2017, Visual Studio 2019 et/ou Visual Studio 2022 et le lier ensemble. L’exigence clé est que le LIEN doit être effectué par rapport au jeu d’outils le plus récent de la combinaison. Consultez Microsoft Learn.
Les projets CMake pour ces triplets sont générés à l’aide de CMAKE_SYSTEM_NAME
la valeur « Windows ».
- Le débogage « Juste mon code » peut généralement être désactivé dans une bibliothèque pour économiser de l’espace de code.
if(MSVC)
target_compile_options(mytarget PRIVATE /JMC-)
endif()
- MSBuild ajoute automatiquement certains indicateurs de build qui ne sont pas activés par défaut dans le compilateur MSVC lui-même. Pour garantir le même comportement avec Ninja ou d’autres générateurs, ajoutez ces paramètres de build.
if(MSVC)
target_compile_options(mytarget PRIVATE /Zc:inline)
endif()
- Les paramètres de build recommandés pour les versions plus récentes de MSVC sont encouragés à améliorer la sécurité du code.
if(MSVC)
target_compile_options(mytarget PRIVATE "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")
target_link_options(mytarget PRIVATE /DYNAMICBASE /NXCOMPAT)
if((CMAKE_SIZEOF_VOID_P EQUAL 4)
AND (NOT (${VCPKG_TARGET_ARCHITECTURE} MATCHES "^arm")))
target_link_options(mytarget PRIVATE /SAFESEH)
endif()
if((MSVC_VERSION GREATER_EQUAL 1928)
AND (CMAKE_SIZEOF_VOID_P EQUAL 8)
AND ((NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)))
target_compile_options(mytarget PRIVATE "$<$<NOT:$<CONFIG:DEBUG>>:/guard:ehcont>")
target_link_options(mytarget PRIVATE "$<$<NOT:$<CONFIG:DEBUG>>:/guard:ehcont>")
endif()
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(mytarget PRIVATE /sdl)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.24)
target_compile_options(mytarget PRIVATE /ZH:SHA_256)
endif()
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
AND (NOT (${VCPKG_TARGET_ARCHITECTURE} MATCHES "^arm")))
target_link_options(mytarget PRIVATE /CETCOMPAT)
endif()
endif()
- Pour améliorer la conformité standard C/C++, utilisez les derniers paramètres de commutateur.
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(mytarget PRIVATE /permissive- /Zc:__cplusplus /Zc:inline)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26)
target_compile_options(mytarget PRIVATE /Zc:preprocessor)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28)
target_compile_options(mytarget PRIVATE /Zc:lambda)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.35)
target_compile_options(mytarget PRIVATE /Zc:templateScope)
endif()
endif()
- Pour prendre en charge l’utilisation de toute l’optimisation du programme / génération de code au moment du lien, les paramètres de build recommandés sont les suivants :
if((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND CMAKE_INTERPROCEDURAL_OPTIMIZATION)
target_compile_options(${PROJECT_NAME} PRIVATE /Gy /Gw)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.35)
target_compile_options(mytarget PRIVATE /Zc:checkGwOdr)
endif()
endif()
- Si vous activez les atténuations de Spectre, utilisez les gardes suivants.
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if((MSVC_VERSION GREATER_EQUAL 1913) AND (NOT WINDOWS_STORE))
target_compile_options(mytarget PRIVATE "/Qspectre")
endif()
endif()
Notez que vous souhaiterez peut-être également fournir une option de build CMake explicite pour contrôler cela également.
Consultez Microsoft Learn.
Commentaires sur vcpkg
vcpkg est un projet open source. Sélectionnez un lien pour fournir des commentaires :