×

clang windows

clang windows(在Windows使用clang编译器)

admin admin 发表于2023-05-23 11:19:14 浏览23 评论0

抢沙发发表评论

本文目录

在Windows使用clang编译器

从VS2019 16.2开始,有了一种更方便的在Windows里使用clang的方法:vs自带了llvm(clang),不在需要各种手动安装和项目配置了。

在vs installer中,选中clang

在项目配置里,配置一下,即可。

详见 Clang/LLVM support in Visual Studio projects | Microsoft Docs

怎样 用 codeblock 和 clang 创建 windows 应用

1,安装
Code:Blocks安装版本有两个,一个是不带MinGW,一个是带MinGW(GNU工具在Windows上的一种移植,里面有GNU编译器套件)
当然Code:Blocks里面也支持其他编译器,比如微软的VS C++,Code:Blocks会自动侦测,或者你自己可以手动设定
2,启动Code:Blocks
当你安装好Code:Blocks,启动Code:Blocks
3,建立工程
从菜单File-》new-》 project... (启动工程向导)
在弹出的project选择窗口,选择console application -》 在工程向导第一个窗口选择语言C -》 输入工程名称信息(包括设定工程目录) -》 next -》finish(这个画面还有机会选择编译器)
自动产生main.c++:

GCC/G++,ICC,Clang,MSVC,BCC等C/C++编译器有什么特长和不足

clang编译速度快,但是貌似编译结果运行相对会慢。功能更新一般也比较快。
g++编译速度比clang慢,编译结果运行貌似比clang快。功能更新稍慢。
vc这几年没编译过大工程,感觉上编译速度在clang和g++之间。以过去的经验g++和vc编译结果运行速度差不多。功能更新上就是一坨屎。但是在Windows上写点正经东西你可能不得不用它,相对的你也只能在Windows上用它。
icc很久没用过,过去印象编译速度很慢,运行速度最快但是感觉有点得不偿失。最大的问题是这东西要钱,前三个都是免费的。
bcc直接无视就好了。

微软将Clang带进Windows,会产生怎样的影响

爱应用-WPer: 情缘丶杀手为您解答:
答:如果有影响微软就不会带进windouws了
爱应用专为WP用户而生 望采纳谢谢。

如何在 Windows 下使用 Vim 的 YouCompleteMe 插件

.YourCompleteMe使用说明
-for-windows
2.本程序YCM部分使用的几乎是该作者提供的文件。
3.使用步骤:
a.确保电脑上安装有python2.7,并且python.exe在path目录里。
b.在_vimrc中注释掉neocpmplete插件,反注释YourCompleteMe.
c.打开vim ,输入命令 :YcmDebug.如果有看到clang版本信息号,server running at,
server process ID 等即表示YCM已经可以使用。
d.对于C++补全,首先确保电脑上安装有MinGW或者CLang(折腾去吧)。然后运行如下
命令找到C++的库文件:
gcc:
POSIX shell: g++ -E -x c++ - -v 《 /dev/null
windows: g++ -E -x c++ - -v 《 nul
LLVM/CLang:
POSIX shell: clang++ -E -x c++ - -v 《 /dev/null
windows: clang++ -E -x c++ - -v 《 nul
在#include 《...》 search starts here:和End of search list.之间的路径就是C++
库路径。按照默认配载的格式添加进去。
你也可以直接下载我克隆的MinGW,把它放在C盘根目录,再把MinGW/bin目录加到path中。
e. 经测试,XP系统YCM不可用。WIN7 X86和64可以正常使用。原因未知。

Windows搭建MSYS2和MINGW64环境

为了在windows下编译GDAL和Cesium Terrain Builder等软件,需要搭建MSYS2和MINGW64的编译环境

Windows Server 2012 R2
MSYS2 64位

双击安装MSYS2之后,由于MSYS2默认资源站点速度较慢,可以配置国内 清华大学开源镜像站
安装完成后, /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:

/etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:

/etc/pacman.d/mirrorlist.msys ,在文件开头添加:

然后执行 pacman -Sy 刷新软件包数据即可。
配置国内镜像站点后,在shell里面执行 pacman -Syuu 更新全部依赖

MSYS2内置了pacman包管理工具,运行
pacman -S gcc make
即可安装gcc,make等工具

msys2安装完成后,开始菜单会有三个启动方式:

三种启动方式区别主要在于编译环境软件包的不同,如gcc,clang等版本不同。通用的工具如:grep,git,vim,emacs等等在三种方式内都是一样的。

默认情况下, msys64/home 会作为系统默认home目录,如果需要修改home目录,可在环境变量-》用户变量中建立 Home 变量,指向自定义位置,然后修改 msys64/etc/nsswitch.conf ,设置 db_home: /%Home%

windows11应该安装哪个版本的C语言程序

通过wsl2安装Ubuntu。
在Ubuntu系统下安装VScode。用VSCode书写代码,用Gcc或Clang编译代码。第一步肯定是更新软件源和软件。第二步安装gcc。第三步安装CMAKE。第四步运行Vscode。如果Windows端本来就安装有Vscode,在命令行里直接输入就可以直接打开VScode了。
VScode设置,Windows端的VScode扩展在这里需要另外安装,VScode好插件很多,这里只提完成C语言编程的基本插件,推荐直接下载pack这种,虽然有些扩展用不上,但总比少下了好。另外还有一个Coderunner,非常好用还省力。

Clang如何处理MSVC的编译参数

LLVM里面的Clang已经可以替换MSVC的cl.exe(MSVC的编译过程的组织程序-driver),作为Visual Studio的独立工具链,能生成PDB文件支持在Visual Studio里面的源代码调试。为了支持替换cl.exe,clang构建会生成可执行文件clang-cl.exe,接收cl.exe的大部分参数而在内部转换成LLVM的参数形式。

虽然看起来是生成了一个单独的clang-cl.exe,它实际上就是clang.exe的一个副本,如果程序名是clang.exe,还可以在命令行传递“ --driver-mode=cl “参数启用cl.exe的参数解析模式。所以clang-cl.exe和clang.exe是一样的,都接受“ --target= i686-pc-windows“, 但是为什么clang-cl.exe却不能解析“ -triple i686-pc-windows“而clang.exe却可以呢?

程序本身通过检查自身的文件名(argv)来检测是不是要运行在兼容MSVC cl.exe的模式,如果文件名是“clang-cl.exe“,则把对应的DriverMode放到main函数开始处的变量TargetAndMode里面(ToolChain::getTargetAndModeFromProgramName)。下面的代码显示了对应关系,可以看到把文件名clang.exe改成cl.exe也会有一样的效果。

在上面从程序名解析出target和mode后,main函数里面紧接着的代码检查了返回的mode和命令行参数,只要以一个满足则进入 ClangCLMode 。不过这里解析出来的ClangCLMode只用来处理命令行参数的分隔和cl.exe特有的环境变量,包括“CL“和“_CL_“。

再从main函数进入Driver类的对象TheDriver的 BuildCompilation 方法后,会调用 ParseDriverMode方法,里面会根据程序名重新获得driver mode(ToolChain::getTargetAndModeFromProgramName),然后把driver mode字符串传给下面的 setDriverModeFromOption 方法。这个方法根据传入的driver mode选项设置成员变量 Mode .

上面的 Driver类的对象 已经知道当前Mode,比如 CLMode ,下面会组织整个编译过程,包括调用编译器(clang.exe -cc1)和链接器(MSVC的link或者lld-link)。

BuildCompilation紧接着会调用ParseArgStrings。ParseArgStrings调用下面的 getIncludeExcludeOptionFlagMask ,根据Driver的当前Mode得到include mask和exclude mask两个掩码,用于后面(在调用链ParseArgString-》ParseArg-》ParseOneArg的最后的方法ParseOneArg里面)决定是否接受命令行参数。比如在CLMode下就只会接受ClOption和CoreOption。

那么CLOption和CoreOption都有哪些具体参数呢?Clang的所有命令行参数选项都定义在llvm_root oolsclangincludeclangdriverOptions.td里面,由tablegen转成C/C++头文件而被代码引用。下面是从里面截取的target的定义,看到“--target=“选项是同时属于DriverOption和 CoreOption ,而CoreOption在CLMode和非CLMode下均能使用。

以下是“-target“的定义,没有定义Flags,所以在CLMode下也就不能解析,这也就解释了最开始“clang-cl.exe“不接受“-triple i686-pc-windows“参数。

适合win10系统的c语言编译器

桌面操作系统

对于当前主流桌面操作系统而言,可使用 Visual C++、GCC 以及 LLVM Clang 这三大编译器。
Visual C++(简称 MSVC)只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于Windows操作系统之外,主要用于 Unix/Linux 操作系统。
像现在很多版本的 Linux 都默认使用 GCC 作为C语言编译器,而像 FreeBSD、macOS 等系统默认使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS中,Clang 编译器又被称为 Apple LLVM 编译器。
MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visual Studio Community 版本来免费使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。
而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。
MSVC 编译器对 C99 标准的支持就十分有限,加之它压根不支持任何 C11 标准,所以本教程中设计 C11 的代码例子不会针对 MSVC 进行描述。所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGen,当前版本基于的是 Clang 3.8。
也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码则与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节,所以各位使用的时候也需要注意。
为了方便描述,本教程后面涉及 Visual Studio 集成开发环境下的 Clang 编译器简称为 VS-Clang 编译器。

嵌入式系统

而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:

  • 用于 Keil 公司 51 系列单片机的 Keil C51 编译器;

  • 当前大红大紫的 Arduino 板搭载的开发套件,可用针对 AVR 微控制器的 AVR GCC 编译器;

  • ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;

  • DSP 设计商 TI(Texas Instruments)的 CCS(Code Composer Studio);

  • DSP 设计商 ADI(Analog Devices,Inc.)的 Visual DSP++ 编译器,等等。


  • 通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。

  • 不过 Arduino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arduino 所采用的C编译器是基于 GCC 的。

  • 还有像树莓派(Raspberry Pi)这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson TK 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson TK 都默认安装了 Linux 操作系统。

  • 在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。

  • 而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。

  • 下图展示了上述C语言编译器的分类。

为什么windows的clang一定要安装了VS才能用

Windows 下面 mingw 的部分标准库和微软 vs 或者说 MSVC 使用的都是 msvcrt。 mingw 有多个版本例如 tdm-gcc,它默认采用了静态编译,构建的 .exe 里包含了 mingw 的部分库文件,一般来说,一个包含了 的 Helloworld 可执行文件.