【问题标题】:How run clang from command line on Windows?如何在 Windows 上从命令行运行 clang?
【发布时间】:2013-09-13 17:32:22
【问题描述】:

在上周的 Going Native 会议上,Chandler Carruth 宣布存在用于在 Windows 上运行 clang 的预构建二进制文件。相同的信息在博客文章here 中。目标受众是 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 在哪里搜索标准库头文件之后,我必须告诉它在哪里寻找要链接的库。有人可以逐步指导我完成设置或将我指向这样的演练吗?

【问题讨论】:

  • 不应该是clang++吗?不过,不确定这是否重要。
  • @VittorioRomeo:与 clang++ 的结果相同(与 clang.exe 的大小完全相同)。
  • 好的。思路二:搜索iostream所在的路径,添加到clang++flags和-I
  • 这只是一个 alpha 版本,他们“能够构建一个简单的 C++ 应用程序”。目标受众实际上是“有兴趣帮助我们追踪和理解错误的开发人员”。除非您是这样的开发者,否则您至少应该等到测试版发布。
  • 我猜你应该先运行VS2012 x86 Native Tools Command Prompt或类似的东西,将clang++.exe添加到路径中,然后尝试一下。

标签: c++ windows clang


【解决方案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)

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

运行

&gt; "%VS140COMNTOOLS%../../VC/vcvarsall.bat" amd64

amd64 替换为您在Clang 上的目标架构,可能是x86amd64arm。如果您有不同版本的 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 driver 正在尝试通过查询 Windows 寄存器和许多其他技巧来尽可能自动化,所以这些都可能不是以后不再需要了。

【讨论】:

  • 你确定 Clang 真的会读取那些环境变量吗?或者您是否假设某些构建系统可以。
  • 此外,如果我通过命令行标志执行此操作,我仍然会收到错误 - vcruntime.h 中的 expected ';' after to level declarator expanded from '_CRT_BEGIN_C_HEADER' 等等。
  • @Timmmm 是的,很确定,您可以阅读一些 MSVC 驱动程序 here 并搜索那些环境变量。目前直接使用clang++,所以是的,没有构建系统。我从releases.llvm.org 获得了 Win64 安装程序,使用 Clang 3.9.1 和 4.0.0 进行了测试。
【解决方案2】:

如果您不限于使用 Microsoft 编译器。您可以将 clang 与 MinGW-w64 一起使用。只需安装最新版本的llvm binary for WindowsMinGW-w64

您可以使用以下代码来编译您的源文件

clang++ -target x86_64-pc-windows-gnu test.cc -o test.exe

【讨论】:

  • 这消除了“无法找到 Visual Studio 安装”的警告,但它仍然无法在我的 PC 上找到 stdio.h
  • 也许你可以尝试使用clang而不是clang++
  • clang 中的\MD\MT 的等价物是什么(不是clang-cl)?
【解决方案3】:

Clang for Windows 5.0.0 (64 Bit) 和 Visual Studio 2017 Community Edition 或 Build Tools 安装在其默认安装路径(包括最新/匹配的 Windows SDK)中:

C:\>clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

我使用 clang-cl (clang-cl.exe == clang.exe --driver-mode=cl) 获得了很好的体验,它确实会自动找到所有必要的 msvc 库/包含依赖项:

C:\>clang-cl hello.cpp

或编译为 32 或 64 位应用程序:

C:\>clang-cl -m32 hello.cpp
C:\>clang-cl -m64 hello.cpp

替代方案

Arvid Gerstmann's Blog: Using clang on Windows

参考文献

【讨论】:

  • clang 中的\MD\MT 的等价物是什么(不是clang-cl)?
猜你喜欢
  • 2013-04-14
  • 2011-02-21
  • 2018-03-13
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
相关资源
最近更新 更多