
构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载导读本文以 CMake 官方生成器文档 Help/generator/Visual Studio 16 2019.rst 为核心系统讲解如何通过-G Visual Studio 16 2019生成 Visual Studio 2019即 VS16的.sln/.vcxproj工程涵盖支持的项目类型、多实例选择、目标平台架构与工具集Toolset的完整配置方法。读完本文你将掌握从命令行一键生成 VS2019 解决方案、按 Win32/x64/ARM/ARM64 指定架构、选择 v142 及自定义工具集含 hostx86/x64、CUDA、Fortran 集成的完整实战技能并能从仓库源码层面理解底层实现机理。一、生成器概览它能生成什么Visual Studio 16 2019是 CMake 内置的 Visual Studio 系列生成器之一全系列清单见 Help/manual/cmake-generators.7.rst自 CMake 3.14 起引入文档标注versionadded:: 3.14。其作用是在 Windows 上为 Visual Studio 2019 生成原生工程文件解决方案.sln与各项目.vcxproj随后可直接用msbuild或 VS 2019 IDE 完成编译与调试。最基础的调用方式cmake -G Visual Studio 16 2019 -S 源目录 -B 构建目录CMake 会读取源目录中的CMakeLists.txt在当前构建目录下生成*.sln与*.vcxproj文件。注意生成器名称中的空格必须整体加引号传入。支持的项目类型与限制根据原文档「Project Types」一节该生成器仅支持以下语言工程Visual CC/CC#Fortran需配合 Intel 编译器与 Visual Studio 集成而 JavaScript、PowerShell、Python 等其他类型项目不被支持强行enable_language()会导致配置失败。这一点对混合语言项目的前期技术选型尤为重要如果你依赖上述语言应改用 Ninja 等其他生成器或借助自定义命令。二、实例选择多版本 VS 并存时的 CMAKE_GENERATOR_INSTANCEVS 2019 支持在一台机器上安装多个实例例如企业版与社区版并存或不同版本的 Build Tools。文档明确可通过 CMAKE_GENERATOR_INSTANCE 变量CMake 3.11 起支持2017 及以上 VS 生成器均适用指定使用哪一个实例。该变量的取值支持三种形式详见变量文档location location[,keyvalue]* keyvalue[,keyvalue]*locationVS 安装目录的绝对路径顶层目录keyvalue逗号分隔的实例选择细节选项。典型用法# 通过缓存变量指定 cmake -G Visual Studio 16 2019 -DCMAKE_GENERATOR_INSTANCEC:/Program Files (x86)/Microsoft Visual Studio/2019/Community # 通过环境变量指定 set CMAKE_GENERATOR_INSTANCEC:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise cmake -G Visual Studio 16 2019 .值得注意的约束来自变量文档该值不应被项目代码修改toolchain 文件可以通过缓存项初始化它一旦某个构建树已用特定值完成初始化更改该值的行为是未定义的——因此多实例选择应在首次配置时一次性确定。三、平台选择用 -A 指定目标架构默认平台VS2019 生成器的默认目标平台名架构与宿主机一致该默认值保存在 CMAKE_VS_PLATFORM_NAME_DEFAULT 变量中这是 VS16/VS17 与 VS2017 的关键差异VS2017 的默认平台固定为Win32而 VS2019 默认跟随宿主机架构。用 CMAKE_GENERATOR_PLATFORM / -A 覆盖可通过 CMAKE_GENERATOR_PLATFORM 变量指定目标平台命令行最便捷的方式是cmake -A选项。原文档给出的四个标准平台名cmake -G Visual Studio 16 2019 -A Win32 cmake -G Visual Studio 16 2019 -A x64 cmake -G Visual Studio 16 2019 -A ARM cmake -G Visual Studio 16 2019 -A ARM64四个值分别对应 32 位 x86、64 位 x64、32 位 ARM、64 位 ARM64Windows on ARM。进阶Windows SDK 版本选择version 字段平台规格并不局限于架构名还可以携带version字段指定 Windows SDK 版本。仓库源码 Source/cmGlobalVisualStudio14Generator.cxxInitializePlatformWindows揭示了该字段的处理细节VS 2019 及以上支持直接指定10.0见源码第 31-35 行if (version 10.0_s) { if (this-Version VSVersion::VS16) ... }而更早的 VS 版本会报错该值仅 VS 2019 及以上支持以10.0.开头的具体版本如10.0.19041.0会走 Windows 10 SDK 检索逻辑SelectWindows10SDK指定8.1时要求本机已安装 Windows 8.1 SDK否则报错终止未显式指定且目标系统为 Windows 10或未安装 8.1 SDK时自动选择 Windows 10 SDK在 CMP0149 策略 NEW 行为下即使目标系统更老也会尝试检索 Windows 10 SDK但不强制。实战示例# 指定 x64 架构 特定 Windows 10 SDK 版本 cmake -G Visual Studio 16 2019 -A x64,version10.0.19041.0 -S . -B build四、工具集选择默认 v142 与 CMAKE_GENERATOR_TOOLSET默认工具集 v142VS 2019 自带v142工具集即 MSVC 2019 编译器家族生成器默认选中它。需要其他工具集时通过 CMAKE_GENERATOR_TOOLSET 变量指定命令行对应-T选项# 显式选择默认 v142 cmake -G Visual Studio 16 2019 -A x64 -T v142 # 选择其他已安装工具集如 v141即 VS2017 的 MSVC cmake -G Visual Studio 16 2019 -A x64 -T v141选中的工具集名会反映到 CMAKE_VS_PLATFORM_TOOLSET 变量中。工具集规格的完整语法与实例选择类似工具集规格支持三种形式见 CMAKE_GENERATOR_TOOLSETtoolset toolset[,keyvalue]* keyvalue[,keyvalue]*支持的keyvalue选项VS 2010 及以上适用cudaversion|path指定使用的 CUDA 工具包版本或指向独立 CUDA 工具包目录的路径版本形式仅当 CUDA 的 VS 集成已全局安装时可用。结果反映在 CMAKE_VS_PLATFORM_TOOLSET_CUDA 与 CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR 变量中fortrancompilerCMake 3.29 新增指定 Fortran 编译器取值ifortIntel classic或ifxIntel LLVM前提是相应编译器的 Visual Studio Integration 功能已安装——这正是文档「Project Types」中 Fortran 支持Intel 编译器集成的底层通道hostx86/hostx64详见下文「主机工具架构」。主机工具架构hostx86 / hostx64本生成器复用了公共片段 Help/generator/include/VS_TOOLSET_HOST_ARCH.rst其核心事实是VS2019 的每个工具集都分别提供面向 32 位x86与 64 位x64宿主机编译的变体与它们所面向的目标架构无关。默认选择规则文档以占位符形式给出在 x64 宿主机上默认使用 64 位变体否则使用 32 位变体。这保证了默认配置下编译工具位宽与宿主机匹配从而充分利用大内存机器。若需显式指定# 强制使用 64 位主机工具 cmake -G Visual Studio 16 2019 -A x64 -T v142,hostx64 # 强制使用 32 位主机工具 cmake -G Visual Studio 16 2019 -A x64 -T v142,hostx86补充说明同一公共片段也被 Visual Studio 17 2022 生成器复用其默认规则相同而较老的 VS2017 生成器则使用独立的旧版片段VS_TOOLSET_HOST_ARCH_LEGACY.rst默认固定 32 位变体——对比可见 VS2019 在主机工具位宽策略上的明显改进。五、源码视角生成器在 CMake 中的落地版本枚举与类层次在仓库源码 Source/cmVSVersion.h 中VS 版本被枚举为数值VS16 160VS2019 生成器正是基于该版本号驱动的。VS2015~VS2019 各代生成器共享基类cmGlobalVisualStudio14Generator见 Source/cmGlobalVisualStudio14Generator.cxx其中大量this-Version VSVersion::VS16的分支就是 VS2019 特有行为的实现点例如前文所述 SDK10.0特例。从文档到实现的行为映射文档主题命令行/变量源码落点生成器名称-G Visual Studio 16 2019注册于生成器工厂列入 Help/manual/cmake-generators.7.rst平台选择-A Win32/x64/ARM/ARM64cmGlobalVisualStudioGenerator平台解析-A携带的version字段在InitializePlatformWindows中校验实例选择CMAKE_GENERATOR_INSTANCE多实例探测逻辑见 CMAKE_GENERATOR_INSTANCE工具集选择-T v142[,host...]cmGlobalVisualStudio10Generator工具集规格解析默认平台名CMAKE_VS_PLATFORM_NAME_DEFAULT配置期写入生成器状态六、完整实战一条命令链覆盖典型需求# 场景一x64 桌面应用默认 v142 工具集 cmake -G Visual Studio 16 2019 -A x64 -S . -B build-x64 # 场景二ARM64 目标Windows on ARM cmake -G Visual Studio 16 2019 -A ARM64 -S . -B build-arm64 # 场景三x64 指定 Windows 10 SDK 版本 cmake -G Visual Studio 16 2019 -A x64,version10.0.19041.0 -S . -B build-sdk # 场景四x64 显式 64 位主机工具 特定 CUDA 工具包 cmake -G Visual Studio 16 2019 -A x64 -T v142,hostx64,cuda11.8 -S . -B build-cuda # 场景五多 VS 实例并存时指定具体实例 cmake -G Visual Studio 16 2019 -DCMAKE_GENERATOR_INSTANCEC:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise -S . -B build-enterprise配置完成后即可打开构建目录下的*.sln在 VS2019 IDE 中编译调试或用命令行msbuild build-x64/MyApp.sln /p:ConfigurationRelease直接构建。七、注意事项与使用前提运行环境前提该生成器面向 Windows Visual Studio 2019或对应 Build Tools。首次配置时 CMake 会探测 VS 实例与已安装组件若找不到符合要求的实例会配置失败。变量不可变更约束CMAKE_GENERATOR_INSTANCE、CMAKE_GENERATOR_TOOLSET、CMAKE_GENERATOR_PLATFORM一旦参与初始化构建树后续更改行为未定义详见各变量文档务必在首次配置时定稿。语言支持边界仅 Visual C、C# 及Intel 集成的Fortran 可生成JavaScript/PowerShell/Python 等项目类型不支持。旧版差异VS2017 生成器默认平台为Win32且默认使用 32 位主机工具迁移到 VS2019 后这两项默认行为均改变默认跟随宿主机架构、x64 主机默认用 64 位工具升级项目时需重新核对架构与工具链假设。SDK 版本语法version10.0不带后缀仅 VS 2019 及以上支持旧版本生成器会直接报错这是源码cmGlobalVisualStudio14Generator中明确的硬性校验。如需查阅生成器全家族VS 2008~VS 2026的横向对比与选择建议可继续阅读 Help/manual/cmake-generators.7.rst各相关变量的完整语义见 Help/variable/ 目录下对应文档。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐LevelDB 如何在 Windows 上用 CMake 生成 Visual Studio 2017 工程并编译LevelDB 如何在 Windows 上用 CMake 生成 Visual Studio 2017 工程并编译 如果你的目标是把 LevelDB 在 Wind数据库KV存储嵌入式数据库CMake多配置生成器详解Visual Studio与Xcode的配置管理CMake多配置生成器详解Visual Studio与Xcode的配置管理 什么是多配置生成器 多配置生成器Multi Config Generator是构建工具开发工具CLI终极CMake与Visual Studio集成指南项目文件生成与调试配置完全解析终极CMake与Visual Studio集成指南项目文件生成与调试配置完全解析 CMake与Visual Studio的集成是现代C开发中至关重要的技能构建工具开发工具CLI上一篇kind 集群配置完全指南从最小配置到多节点、网络与 kubeadm 深度定制下一篇Windows 11 休眠设置2 步分清睡眠与休眠省电还能秒回现场创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考