在 clion 的 settings/preferences → build, execution, deployment → cmake 中修改 cmake 选项,通过 cmake options 文本框添加(如 -dcmake_c_standard=11),并需手动重载项目生效。

在哪里改 CMake 编译选项
CLion 的 CMake 选项不是写在 CMakeLists.txt 里,而是通过 IDE 的「CMake 设置」界面统一管理。这些选项会作为参数传给 cmake 命令(比如 -DCMAKE_BUILD_TYPE=Debug),影响整个构建过程。直接改 CMakeLists.txt 中的 set() 可能被覆盖,尤其当你启用了「重新加载时自动同步」或用了多配置文件时。
打开路径是:Settings / Preferences → Build, Execution, Deployment → CMake(快捷键 Ctrl+Shift+A 搜 “CMake” 更快)。这里每一条配置对应一个独立的 CMake 配置文件,可命名、切换、共享。
- 修改
CMAKE_BUILD_TYPE:选下拉框里的Debug/Release/RelWithDebInfo即可,CLion 会自动加-DCMAKE_BUILD_TYPE=xxx - 手动追加其他选项:填在
CMake options文本框里,例如-DCMAKE_C_STANDARD=11 -DENABLE_LOG=ON,空格分隔,不加引号 - 想用 Ninja 而不是 Make:在
Build tool下拉中选Ninja,CLion 会自动加-G Ninja;若 Ninja 不在 PATH,需先配置其路径或用-DCMAKE_MAKE_PROGRAM指定 - 避免重复定义:不要在
CMake options里写-DCMAKE_C_COMPILER同时又在 Toolchain 里设了编译器——后者优先级更高,前者会被忽略
CMake options 和 Toolchain 的优先级关系
CLion 启动 CMake 时,实际执行的是类似这样的命令:
cmake -S /path/to/src -B /path/to/build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_STANDARD=11 ...
其中参数来源有明确优先级:
-
Toolchain中指定的编译器(CMAKE_C_COMPILER、CMAKE_CXX_COMPILER)和 sysroot > 所有CMake options中的手动定义 -
CMake options中的-D项 >CMakeLists.txt中同名set(... CACHE)(除非加FORCE) - 环境变量(如
CC=gcc-12)在 CLion 启动前生效,会覆盖 Toolchain 中的默认值,但无法在 IDE 设置里直接编辑,需改启动脚本或系统 PATH
典型踩坑:你在 CMake options 里写了 -DCMAKE_C_COMPILER=/usr/bin/gcc-12,但 Toolchain 里已选了 “GCC at /usr/bin/gcc-11”,结果还是用 gcc-11 —— 因为 Toolchain 优先级更高。
如何让 CMake 选项生效且不丢失
改完设置后,CLion 不会自动重跑 CMake;必须手动触发「Reload CMake project」,否则新选项完全不参与构建。右键 CMakeLists.txt → Reload CMake project,或点工具栏上的循环箭头图标。
- 如果项目已有
build目录且内容混乱,建议勾选Clear build directory before building(在 CMake 设置页底部),避免旧缓存干扰 - 多人协作时,想把某套 CMake 选项共享出去:勾选配置文件右侧的
Share复选框,CLion 会把该配置写入.idea/cmake.xml,提交到 Git 即可 - 调试时发现选项没起作用?打开
Build → CMake → Show CMake Command Line,看实际执行的命令是否含你填的参数 —— 这是最直接的验证方式
常见错误:CMake options 写错导致 configure 失败
最常遇到的失败不是语法错,而是逻辑冲突。例如:
-
-DCMAKE_BUILD_TYPE=Debug -G Xcode:Xcode 生成器不支持CMAKE_BUILD_TYPE,会报错CMake Error: cmake version 3.30 does not support generator "Xcode" with -DCMAKE_BUILD_TYPE -
-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON但 Toolchain 里 GCC 版本是 9.4 → 编译器不支持 C++20,configure 阶段就失败,不会等到 build - 在
CMake options里写-DMyOption=ON,但CMakeLists.txt里没用option()或set(MyOption OFF CACHE BOOL)声明,该变量只是“存在”,但不会影响任何逻辑
真正关键的不是“能不能写”,而是“写完有没有被 CMakeLists.txt 消费”。建议每次新增 -D 项,都去源码里 grep 一遍变量名,确认它确实被 if(MyOption) 或 target_compile_features 等实际用到了。











