Skip to content

Commit 6971281

Browse files
author
liuxinwei
committed
docs(configs): 更新cmake文档添加Windows下Clang使用指南
添加Windows环境下使用Clang编译器的常见问题解决方案,包括使用LLVM的lld-link和MinGW工具链两种方案,并对比优缺点给出建议
1 parent 021022b commit 6971281

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

doc/configs/cmake.md

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pip install cmake -i https://pypi.tuna.tsinghua.edu.cn/simple
1717
conda install -c conda-forge ninja
1818

1919
# 安装 Clang/LLVM 作为 C/C++ 编译器
20-
conda install -c conda-forge clangdev
20+
conda install -c conda-forge clangdev llvmdev
2121
```
2222

2323
---
@@ -52,3 +52,55 @@ pip install conan -i https://pypi.tuna.tsinghua.edu.cn/simple
5252
```
5353

5454
Conan 可用于自动化管理第三方 C/C++ 库依赖,推荐在需要复杂依赖时启用。
55+
56+
## 4. Windows 下用 Clang 的典型“坑”
57+
58+
这是 Windows 下用 Clang 的一个典型“坑”:Clang 在 Windows 上默认模拟 **MSVC 工具链**,所以会去找 `link.exe` 和 MSVC 的运行库。如果你没装 Visual Studio Build Tools,就会报错。
59+
60+
不过,**conda 环境里有办法绕过对 MSVC 的依赖**,主要有两条路线:
61+
62+
---
63+
64+
### 🛠️ 方案一:使用 LLVM 自带的 `lld-link`
65+
1. 安装 Clang 和 lld:
66+
```bash
67+
conda install -c conda-forge clang lld
68+
```
69+
2. 在 CMake 或构建系统中指定使用 `lld-link` 作为链接器:
70+
```bash
71+
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_LINKER=lld-link .
72+
```
73+
3. 这样 Clang 就不会再调用 MSVC 的 `link.exe`,而是用 LLVM 的 `lld-link` 来完成链接。
74+
75+
---
76+
77+
### 🛠️ 方案二:使用 MinGW 工具链
78+
1. 安装 MinGW-w64 工具链:
79+
```bash
80+
# 稳定版(推荐,适合 Python 扩展)
81+
conda install -c conda-forge m2w64-toolchain
82+
83+
# 最新版(适合追新或和 MSYS2 环境统一)
84+
conda install -c msys2 m2w64-toolchain
85+
```
86+
2. 配置 CMake,让 Clang 使用 MinGW 的 `ld` 和运行库:
87+
```bash
88+
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_CXX_STANDARD_LIBRARIES="-lstdc++ -lgcc -lm -lpthread"
89+
```
90+
3. 这样 Clang 会走 MinGW 的运行库,而不是 MSVC。
91+
92+
---
93+
94+
### ⚖️ 对比
95+
| 路线 | 优点 | 缺点 |
96+
|------|------|------|
97+
| **LLVM + lld-link** | 完整 LLVM 工具链,现代化,链接速度快 | 仍需 Windows SDK 的头文件和库(可通过 `conda-forge::vs2015_runtime` 等包解决一部分(即 `conda install -c conda-forge vs2015_runtime`)) |
98+
| **MinGW 工具链** | 完全不依赖 MSVC,conda 内即可自洽 | 与 Windows 原生 ABI 不完全兼容,某些库可能不适配 |
99+
100+
---
101+
102+
### 🎯 建议
103+
- 如果你要做 **跨平台科学计算/扩展模块**(比如 Python C 扩展),推荐 **方案一(Clang + lld-link)**,更接近 MSVC ABI,兼容性好。
104+
- 如果你要做 **纯开源跨平台项目**,不依赖 MSVC ABI,可以用 **方案二(MinGW)**,完全摆脱 Visual Studio。
105+
106+
---

0 commit comments

Comments
 (0)