如何在 Windows 上从命令行运行 clang?

新手上路,请多包涵

在上周的 Going Native 会议上,Chandler Carruth 宣布存在用于在 Windows 上运行 clang 的预构建二进制文件。相同的信息在 此处 的博客文章中。目标受众是 Visual Studio 的用户,但我想从命令行运行 clang。

我运行安装程序并将 LLVM bin 目录添加到我的路径中,但是当我尝试编译“Hello world”时,我得到了这个:

 C:\>clang hello.cpp
hello.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

我找不到任何关于如何配置东西以在 Windows 上运行 clang 的信息,我猜在我弄清楚如何告诉 clang 在哪里搜索标准库头文件之后,我必须告诉它在哪里看用于链接的库。有人可以逐步引导我完成设置或将我指向这样的演练吗?

原文由 KnowItAllWannabe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 742
1 个回答

这是一个老问题,从那以后发生了很多变化。鉴于这是在 Windows 上尝试 Clang 时的常见问题,它值得一个更新的答案。

截至 2017 年,使用适用于 Windows 的 LLVM 3.9.1 构建,您需要以下内容才能从您的 shell 调用 clang

VC++ 构建工具

我们仍然没有适用于 Windows 的 libc++ 端口,因此 Clang 使用 VC++ 库以及 VC++ 链接器。

所以首先你需要在你的系统上安装 VC++ Build Tools 。如果您碰巧有 Visual C++ IDE,请注意您已经安装了这些。

环境变量

您需要告诉 Clang 在哪里可以找到构建工具及其库。

选项 1 (vcvarsall.bat)

这是最简单和标准的选项。

> "%VS140COMNTOOLS%../../VC/vcvarsall.bat" amd64

Replacing amd64 with your target architecture on Clang, which may be x86 , amd64 or arm .如果您有不同版本的 VC++ 工具集,您也可以替换 %VS140COMNTOOLS%

作为快捷方式,您可以运行 Visual C++ 命令提示符而不是 cmd+vcvarsall ,因为您需要为打开的每个命令提示符调用此批处理。

现在您可以 享受 Clang 了。

选项 2(手动)

如果您无法运行 vcvarsall.bat 或者想要自动化此过程,欢迎您,我也有同样的需要。

以下所有环境变量都是由 vcvarsall.bat 自动设置的,因此您可以运行它并从那里获取您的机器值。我将以地雷为例,希望其他地方也一样。

INCLUDE 环境变量设置为 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;

LIB 设置为 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64; 。请注意架构特定的组件!

对于构建工具,您可以在 PATH 上使用这些工具,或者设置 VCINSTALLDIR 环境变量。 Clang 会同时尝试这两种方法,倾向于 VCINSTALLDIR

VCINSTALLDIR 设置为 %VS140COMNTOOLS%../../VC 或将 %VS140COMNTOOLS%../../VC/bin/amd64 添加到您的 PATH

脚注

这一切都很少记录,因此要求可能随时更改,但 Clang MSVC 驱动程序 正在尝试通过查询 Windows 寄存器和许多其他技巧来尽可能地自动化这一点,因此这些可能不再是必要的了未来。

原文由 Denilson Amorim 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题