在上周的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在哪里搜索标准库标题后,我将不得不告诉它在哪里寻找要链接的库。有人可以一步一步地指导我完成设置或指导我进行这样的演练吗?
答案 0 :(得分:7)
这是一个老问题,从那以后发生了很多变化。鉴于这是在Windows上尝试Clang时的常见问题,它应该得到更新的答案。
截至2017年,使用适用于Windows的LLVM 3.9.1版本,您需要以下内容才能从shell调用clang
。
我们仍然没有Windows的libc ++端口,因此Clang使用VC ++库以及VC ++链接器。
首先,您需要系统上的VC++ Build Tools。如果您碰巧拥有Visual C ++ IDE,请注意您已经安装了这些。
您需要告诉Clang在哪里可以找到构建工具及其库。
这是最简单和最标准的选择。
运行
> "%VS140COMNTOOLS%../../VC/vcvarsall.bat" amd64
用Clang上的目标架构替换amd64
,可能是x86
,amd64
或arm
。如果您有不同版本的VC ++工具集,也可以替换%VS140COMNTOOLS%
。
作为一种快捷方式,您可以运行Visual C ++命令提示符而不是cmd+vcvarsall
,因为您需要为打开的每个命令提示符调用此批处理。
现在你可以享受 Clang。
如果您无法运行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注册表和许多其他技巧尽可能地自动化,所以没有这个将来可能还有必要。
答案 1 :(得分:1)
在默认设置路径中安装Clang for Windows 5.0.0 (64 Bit)和Visual Studio 2017社区版或构建工具(包括最新/匹配的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。
<强>参考强>
答案 2 :(得分:1)
如果您不限于使用Microsoft编译器。您可以使用与MinGW-W64的clang。只需安装最新版本的llvm binary for Windows和MinGW-w64。
您可以使用以下代码编译源文件
clang++ -target x86_64-pc-windows-gnu test.cc -o test.exe