MSVC를 사용하는 Windows
vcpkg에는 MSVC cl.exe
컴파일러를 사용하여 Windows 데스크톱 애플리케이션을 빌드하기 위한 트리플렛이 포함되어 있습니다.
아키텍처 | vcpkg triplets | 커뮤니티 |
---|---|---|
X64 | x64-windows | |
x64-windows-release | 예 | |
x64-windows-static | ||
x64-windows-static-md | 예 | |
x64-windows-static-release | 예 | |
x86 | x86-windows | |
x86-windows-static | 예 | |
x86-windows-static-md | 예 | |
arm | arm-windows | 예 |
arm-windows-static | 예 | |
arm64 | arm64-windows | |
arm64-windows-static | 예 | |
arm64-windows-static-md | 예 | |
arm64-windows-static-release | 예 | |
arm64ec | arm64ec-windows | 예 |
연결 트리플렛은 static
MSVC 런타임을 정적 라이브러리(예 VCPKG_CRT_LINKAGE static
: )로 사용하도록 설정됩니다.
static-md
연결 세 쌍둥이는 MSVC 런타임을 DLL(예VCPKG_CRT_LINKAGE dynamic
: )로 사용하도록 설정됩니다. Microsoft Learn당 MSVC 런타임을 재배포하는 데 권장되는 솔루션입니다.
기본적으로 vcpkg는 코드를 빌드하기 위해 시스템에 설치된 최신 버전의 Visual Studio를 사용합니다. 특정 버전을 선택하려면 설정할 VCPKG_PLATFORM_TOOLSET
사용자 지정 트리플렛 또는 트리플렛 오버레이를 만듭니다.
예를 들어 Visual Studio 2017 도구 집합을 강제로 사용해야 합니다.
set(VCPKG_PLATFORM_TOOLSET v141)
Microsoft Visual C/C++ 런타임은 '전달 이진 호환'입니다. 즉, Visual Studio 2015 업데이트 3, Visual Studio 2017, Visual Studio 2019 및/또는 Visual Studio 2022를 사용하여 코드를 빌드하고 모두 연결할 수 있습니다. 주요 요구 사항은 조합의 최신 도구 집합에 대해 LINK를 수행해야 한다는 것입니다. Microsoft Learn을 참조하세요.
이러한 세 쌍둥이에 대한 CMake 프로젝트는 "Windows" 집합을 사용하여 CMAKE_SYSTEM_NAME
빌드됩니다.
- 일반적으로 라이브러리에서 "내 코드만" 디버깅을 사용하지 않도록 설정하여 코드 공간을 절약할 수 있습니다.
if(MSVC)
target_compile_options(mytarget PRIVATE /JMC-)
endif()
- MSBuild는 MSVC 컴파일러 자체에서 기본적으로 설정되지 않은 일부 빌드 플래그를 자동으로 추가합니다. Ninja 또는 다른 생성기와 동일한 동작을 보장하려면 이러한 빌드 설정을 추가합니다.
if(MSVC)
target_compile_options(mytarget PRIVATE /Zc:inline)
endif()
- 향상된 코드 보안을 위해 최신 버전의 MSVC에 권장되는 빌드 설정이 권장됩니다.
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()
- 표준 C/C++ 규칙 향상을 위해 최신 스위치 설정을 사용합니다.
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()
- 전체 프로그램 최적화/링크 타임 코드 생성 사용을 지원하기 위해 권장되는 빌드 설정은 다음과 같습니다.
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()
- Spectre 완화를 사용하도록 설정하는 경우 다음 가드를 사용합니다.
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()
이를 제어하는 명시적 CMake 빌드 옵션도 제공할 수 있습니다.
vcpkg 피드백
vcpkg은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.