新建 C++ 项目时,用 VS2022 项目向导,还是手建目录 + CMake?核心结论:向导是「快」,CMake 手建是「稳」;长期维护的 Boost + OpenCV 项目走 CMake 手建路线。
一、「完全不利用 VS 向导」指什么
VS 新建项目时,向导会自动生成:
- 目录结构
.vcxproj/.sln- 一些默认代码
- 默认的编译配置
不用向导,就是自己手建目录、手写 CMakeLists.txt、用 VS 的「打开文件夹」模式加载。
二、CMake 手建的好处
| # | 好处 | 说明 |
|---|---|---|
| 1 | 结构清晰、可控 | 向导生成的项目,目录和配置是向导定的;手建时 src/、include/、resources/、tests/ 怎么分,自己说了算 |
| 2 | 跨平台 | CMakeLists.txt 是跨平台的:同一个项目,Windows 用 MSVC,WSL 用 GCC,不用改任何东西;向导生成的 .vcxproj 只能在 VS 里用 |
| 3 | 依赖管理统一 | Boost、OpenCV 全走 find_package,环境变量一配,所有项目通用;向导的项目要手动一个个加 include、lib 路径 |
| 4 | 不污染仓库 | .vcxproj、.sln、.vs/、out/ 都是本地文件,不进 Git;CMake 项目只需提交 CMakeLists.txt 和源码,干净 |
| 5 | 和工业界一致 | 大多数 C++ 开源项目、跨平台项目都用 CMake;养成这个习惯,以后参与别人的项目、或自己发布项目,都顺 |
| 6 | 配置一次、项目复用 | 环境变量和 CMakeLists.txt 模板定好后,新建项目就是复制模板、改项目名、加源文件。增量配置,不是每次从零配 |
三、CMake 手建的代价
- 初期配置复杂。第一次要理解:
CMakeLists.txt的语法、find_package怎么找库、环境变量怎么设、CMakePresets.json的格式。这些概念对新手是门槛。 - VS 集成不如原生项目「顺滑」。向导项目是 VS 原生支持,调试、IntelliSense 开箱即用;CMake 项目通过「打开文件夹」或「CMake 项目」模式支持,功能也全,但偶尔会遇到配置识别问题。
- 调试和 IDE 功能偶有摩擦。断点、监视窗口、调用栈这些都没问题;但某些 VS 特有的功能(比如某些项目属性页面),在 CMake 项目里没有对应入口。
- 学习曲线。要同时学 CMake、学 Boost/OpenCV 的 CMake 配置。一次性投入大,但长期收益高。
四、取舍小结
整体体验是:结构清晰,配置相对复杂;不过做项目时配置一次,后续只是增量配置。
- 「配置一次」 指整套模板定下来:环境变量、
CMakeLists.txt模板、CMakePresets.json模板。 - 「增量配置」 指新项目复用模板:复制模板 → 改项目名 → 加源文件 → 加依赖组件。
五、什么时候用向导,什么时候不用
| 场景 | 建议 |
|---|---|
| 临时测试、学习某个库 | 用向导 |
| 一次性小工具,不打算长期维护 | 用向导 |
| 想快速看某个功能的效果 | 用向导 |
| 正式项目,长期维护 | CMake 手建 |
| 需要跨平台(Windows + Linux) | CMake 手建 |
| 依赖多个第三方库(Boost、OpenCV) | CMake 手建 |
| 要提交 Git、给别人看 | CMake 手建 |
六、结论
向导是「快」,CMake 手建是「稳」。 长期做 C++/Boost + OpenCV 项目,走 CMake 手建是对的:前期花时间配模板,后期每个项目都省事。
豫公网安备41108202000982号