c++oding="utf-8" ?>
clion默认不启用clang,需手动配置toolchain:在settings→build→toolchains中指定clang/clang++路径,禁用cmakelists.txt硬编码编译器,同时单独启用clangd和clang-tidy。

CLion 默认不使用 Clang,必须手动配置工具链才能让项目真正用 clang 和 clang++ 编译,否则 CMake 仍会走 GCC 或 MSVC。
怎么在 Settings 里配对 Clang 工具链
核心动作是改 Toolchain,不是改 CMakeLists.txt。路径为:File → Settings → Build, Execution, Deployment → Toolchains(macOS/Linux)或 File → Settings → Build, Execution, Deployment → CMake(Windows 下部分版本 UI 位置略有偏移)。
- 选中当前使用的 CMake profile 对应的 Toolchain
-
C Compiler填/usr/bin/clang(macOS)、/usr/bin/clang或/usr/lib/llvm-14/bin/clang(Ubuntu),确保该路径真实存在且可执行 -
C++ Compiler填对应clang++路径,比如/usr/bin/clang++ - 点
Apply后,CLion 会自动触发 CMake reload;若没反应,手动点右上角Reload CMake project
为什么不能在 CMakeLists.txt 里写 set(CMAKE_CXX_COMPILER "clang++")
硬编码编译器路径会导致 CMake cache 污染,常见报错:CMake Error: The source directory does not appear to contain CMakeLists.txt——其实文件就在那儿,只是 CMake 因变量冲突拒绝解析。
- CLion 的 Toolchain 设置会在 configure 阶段直接注入
CMAKE_C_COMPILER和CMAKE_CXX_COMPILER,优先级高于set() - 如果项目里已有这类
set,删掉它;保留只会增加 reload 失败概率 - 真要加编译选项(如
-stdlib=libc++),应在Settings → CMake → CMake options里填:-DCMAKE_CXX_FLAGS="-stdlib=libc++"
Clang 编译失败时最常卡在哪几个点
报错不是代码问题,八成是头文件或链接层缺失。典型现象和对应检查项:
-
error: 'iostream' file not found:Clang 找不到 libc++ 头文件。macOS 上确认已运行xcode-select --install;Ubuntu 需装libc++-dev包 -
undefined reference to '__cxa_throw':链接时没用 libc++。Toolchain 设置里勾选Use libc++(如有),或在 CMake options 加-DCMAKE_EXE_LINKER_FLAGS="-lc++" - Clang 版本太旧(如
clang++ --version输出 6.x):某些 C++17 特性不支持,建议用 Homebrew 安装 llvm:brew install llvm,然后用/opt/homebrew/opt/llvm/bin/clang++
Clangd 和 Clang-Tidy 是不是开了就自动生效
不是。它们是独立开关,需手动启用,且依赖 Clang 工具链已正确配置。
- 进
Settings → Languages & Frameworks → C/C++ → Clangd,勾选Show errors and warnings from clangd和Use clang-tidy via clangd - Clangd 只有在 Toolchain 使用 Clang 时才能正确索引符号;若 Toolchain 还是 GCC,Clangd 会降级为只做基础语法检查
- 首次启用后,编辑器右下角可能显示 “Indexing…”,等进度条消失才代表符号解析完成
最容易被忽略的是:Clang 工具链配完后,CMake reload 不成功时别反复点击,先看 Build → CMake → Show CMake Output 里的实际错误——很多问题根源不在 IDE 设置,而在终端里 clang++ --version 都跑不通。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











