Windows10+VS2017环境下CMake忽略编译器设置,如何改用LLVM Clang?
解决Windows 10下CMake强制使用LLVM Clang(忽略VS2017编译器)的问题
我之前也踩过这个坑——Windows下CMake一旦检测到VS环境,就会顽固地默认选用VC编译器,哪怕手动指定了Clang路径也没用。这主要是因为project()命令会触发CMake重新检测编译器,直接覆盖你之前的set()设置;再加上VS环境变量优先级极高,很容易干扰CMake的编译器选择逻辑。下面给你几个经过验证的可行方案:
方案1:命令行环境变量+Ninja生成器指定
这种方式绕开VS默认工具链,直接用Ninja配合Clang编译:
- 打开**普通命令提示符(CMD)**或PowerShell,不要用VS自带的Developer Command Prompt,它会自动加载VC环境,干扰编译器选择
- 设置临时环境变量指定Clang路径:
set CC="C:\Program Files\LLVM\bin\clang.exe" set CXX="C:\Program Files\LLVM\bin\clang++.exe"
- 切换到你的build目录,调用CMake并指定Ninja生成器:
cmake -G Ninja ..\你的源码目录
方案2:使用CMake工具链文件
工具链文件是CMake推荐的跨平台指定编译器的可靠方式,比硬编码路径更稳定:
- 在源码目录下创建
clang-toolchain.cmake文件,内容如下:
# 指定Clang编译器路径 set(CMAKE_C_COMPILER "C:/Program Files/LLVM/bin/clang.exe") set(CMAKE_CXX_COMPILER "C:/Program Files/LLVM/bin/clang++.exe") # 明确告诉CMake编译器类型,避免误检测为VC set(CMAKE_C_COMPILER_ID "Clang") set(CMAKE_CXX_COMPILER_ID "Clang")
- 打开命令行切换到build目录,调用CMake时指定工具链文件:
cmake -DCMAKE_TOOLCHAIN_FILE=../clang-toolchain.cmake ..\你的源码目录
方案3:VS生成器+ClangCL工具链
如果还想保留VS的IDE开发环境,VS2017支持直接调用Clang作为工具链(前提是安装LLVM时勾选了"Add LLVM to the system PATH",或在VS中安装了Clang组件):
直接在命令行执行:
cmake -G "Visual Studio 15 2017" -T ClangCL ..\你的源码目录
生成的VS工程会自动用Clang编译代码。
额外注意事项
- 不要在
CMakeLists.txt里直接用set(CMAKE_CXX_COMPILER)指定路径——project()命令会触发编译器重新检测,大概率覆盖你的设置;如果一定要在CMakeLists中配置,建议把set()放在project()之后,但这种方式在Windows下依然不稳定,优先推荐上面三种方案。 - 检查LLVM路径正确性:确认
C:\Program Files\LLVM\bin下存在clang.exe和clang++.exe,注意文件名是全小写的,你原来写的Clang++是大写C,可能会导致路径错误。
内容的提问来源于stack exchange,提问作者Alsein
相关产品推荐
相关产品推荐

