CMake两种构建安装方式优劣对比及传统方式流行原因问询
CMake两种构建安装方式的优劣对比及常见性分析
两种典型构建方式
传统构建安装流程
mkdir build cd build cmake .. make install
现代CMake原生流程
# 配置+安装一步完成(可选指定安装前缀) cmake -S . -B build -DCMAKE_INSTALL_PREFIX=<安装路径> cmake --build build --target install # 或拆分构建与安装步骤 cmake -S . -B build cmake --build build cmake --install build --prefix=<安装路径>
两种方式的客观优劣
传统方式的优缺点
优点
- 符合Unix/Linux环境下的常规构建习惯,步骤直观,新手易上手
- 进入build目录后,可直接使用
make的原生参数(如make -j8控制并行编译),部分开发者认为操作更灵活 - 兼容所有CMake版本,无需考虑版本限制
缺点
- 依赖Unix系命令(
mkdir、cd),Windows环境下需借助PowerShell或WSL模拟,跨平台性差 - 会修改当前工作目录,容易引发后续命令的路径错误
- 硬编码
make命令,无法适配Ninja、MSBuild等其他构建工具,切换工具链时需手动替换命令
现代CMake方式的优缺点
优点
- 全程使用CMake原生命令,跨平台、跨构建工具通用,无需修改命令即可适配不同环境(如Windows下自动调用MSBuild)
- 不改变当前工作目录,避免路径相关问题
- 构建与安装步骤拆分灵活,可单独完成构建后,针对不同环境指定不同安装前缀
- 可通过
cmake --build的参数统一控制编译行为(如-- -j8传递并行参数给底层工具),无需记忆不同构建工具的语法
缺点
- 命令长度较长,参数较多,新手初次接触时学习成本更高
- 依赖较新的CMake版本:
-S/-B需CMake 3.10+,--install需CMake 3.13+,老项目或低版本环境下无法使用
为何传统方式更为常见
- 历史惯性:CMake早期版本没有提供
-S/-B和--install这类便捷命令,开发者长期使用传统方式形成习惯,各类教程、文档也普遍沿用这种写法 - 兼容性需求:很多老项目或需要兼容低版本CMake的场景,必须采用传统方式,避免因版本不足导致构建失败
- 场景局限性:对于仅在Unix系环境下开发的项目,传统步骤更简洁直接,无需额外记忆复杂的CMake参数
- 认知误区:部分开发者认为进入build目录后使用
make的原生功能更灵活,而忽略了cmake --build同样支持传递参数给底层构建工具(如cmake --build build -- -j4等效于make -j4)
内容的提问来源于stack exchange,提问作者ColinKennedy
相关产品推荐
相关产品推荐

