Windows平台CMake标准工作流:能否编辑其生成的解决方案?
Windows平台Visual Studio开发CMake项目的标准工作流与问题解决
一、标准工作流(替代手动cmake生成sln)
直接利用Visual Studio的原生CMake支持,无需手动执行cmake命令,步骤如下:
- 打开Visual Studio,选择「打开本地文件夹」,直接选中项目根目录(包含
CMakeLists.txt的文件夹)。 - VS会自动识别CMake项目,默认在
out/build/[配置名]目录生成构建文件(比如out/build/x64-Debug),无需手动管理build目录。 - 通过顶部工具栏的「CMake」菜单进入「CMake设置」,选择对应生成器(如Visual Studio 17 2022)、架构(x86/x64)、构建类型(Debug/Release)等。
- 直接使用VS的「生成」按钮构建项目,或通过「CMake」→「生成全部」执行构建;运行时在顶部工具栏选择对应的可执行目标即可。
二、解决文件目录与CMakeLists.txt同步问题
1. 让新增文件存入正确目录
不要在VS默认的「CMake目标视图」(按头文件/源文件分类的视图)中添加文件,切换到**「文件夹视图」**(解决方案资源管理器顶部的视图切换按钮),该视图完全对应磁盘上的项目结构:
- 在「文件夹视图」的
include或src目录下右键→「添加」→「新建项」,文件会直接创建到对应目录; - 也可以直接在系统文件资源管理器中新建文件,回到VS后会自动识别并显示。
2. 同步CMakeLists.txt并显示实际目录结构
修改根目录的CMakeLists.txt,添加目录分组逻辑,同时合理管理文件列表:
cmake_minimum_required(VERSION 3.20) project(MyProject) # 显式指定头文件与源文件(推荐,避免意外包含无关文件) set(HEADER_FILES include/hello.h # 新增头文件直接添加到这里 ) set(SOURCE_FILES src/hello.cpp # 新增源文件直接添加到这里 ) # 或使用GLOB自动匹配(适合文件频繁新增的场景,但需注意重新配置CMake) # file(GLOB HEADER_FILES "${PROJECT_SOURCE_DIR}/include/*.h") # file(GLOB SOURCE_FILES "${PROJECT_SOURCE_DIR}/src/*.cpp") add_executable(MyProject ${SOURCE_FILES} ${HEADER_FILES}) # 配置头文件包含路径 target_include_directories(MyProject PUBLIC ${PROJECT_SOURCE_DIR}/include) # 让VS显示与磁盘一致的目录结构,替代默认的按类型分类 source_group(TREE ${PROJECT_SOURCE_DIR} FILES ${SOURCE_FILES} ${HEADER_FILES})
- 当新增文件后,若用显式列表方式,手动在
HEADER_FILES或SOURCE_FILES中添加路径;若用GLOB,只需点击VS顶部「CMake」→「重新配置CMake」,VS会自动扫描新文件并更新项目。 source_group(TREE ...)是关键,它会让VS的解决方案资源管理器显示和磁盘完全一致的目录层级,而非按文件类型分组。
三、Windows开发者处理CMake项目的常见实践
- 优先使用VS原生CMake支持,避免手动执行cmake命令,减少环境配置差异。
- 团队协作时,在
.gitignore中忽略out/、build/等生成目录,只提交源代码和CMakeLists.txt。 - 保持
CMakeLists.txt的简洁性,优先显式列出文件(比GLOB更可靠,避免包含临时文件),文件较多时可按模块拆分CMakeLists.txt(如每个子目录单独编写)。 - 利用VS的「CMake设置」管理多配置(Debug/Release、不同架构),无需手动修改cmake参数。
- 新增文件时,先在磁盘对应目录创建,再更新
CMakeLists.txt(或重新配置),避免VS将文件生成到构建目录。
内容的提问来源于stack exchange,提问作者Otto
相关产品推荐
相关产品推荐

