cmake windows指定编译器,cmake可以编译python吗

  cmake windows指定编译器,cmake可以编译python吗

  因为我想尝试最新的Clang,所以我去了https://llvm.org/,从git获得了最新的源代码。访问发布页面https://releases.llvm.org/,展示如何从Git中检索代码。https://llvm.org/docs/gettingstarted.html

  作者使用MSVC架构,需要提前下载到官网安装 MSVC,安装C桌面开发工作量。如果需要使用lldb,似乎还需要安装Python。

  然后,获取源代码。建议您先从打开 Developer PowerShell for VS中选择以管理员模式启动。然后切换到工作目录,比如D:\dev,将这个目录添加到Windows Defender或者其他反病毒软件的白名单

  或者,打开VS的x64本机命令提示符.我无法理解为什么没有x64原生PowerShell。在命令提示符下使用cmd的命令。

  对于cd D:\dev,由于LLVM的一些测试对EOL比较敏感,对http://www.Sina.com/windows的磁盘空间要求很高,没有参与LLVM开发的打算,拉拉

  如果网络条件不好,请注意使用代理服务器。

  git clone-depth 1-config core . auto crlf=false https://github.com/llvm/llvm-project.git.然后,目录llvm-pp

  在cdllvm-projectmkdirbuild _ ninjacdbuild _ ninja之后,可以使用CMake开始生成构建信息。

  LLVM_ENABLE_PROJECTS选项是禁用自动 CRLF 转换。这里选择了Clang,libcxx,libcxxabi,lld,lldb。如果需要Clang-tidy之类的工具,可以添加clang-tools-extra。

  您必须选择参数 --depth=1来构建LLVM的链接器。否则,因为Clang是用MSVC构建的,所以默认使用MSVC链接器,但是在CMake的配置过程中链接失败,因为默认的MSVC环境变量在日常使用中是不会暴露的。因此,需要MSVC接头以外的接头。

  另外,如果磁盘空间紧张,需要选择需要的构建目标。这样,当结合-depth=1的Git选项时,构造后的总文件大小约为5GB,选择Debug类型可能会消耗数十GB的磁盘空间。

  这里请注意lld忍者不支持主机平台三重选择。另外,由于开发者PowerShell默认是32位的,所以这样构建的Clang是32位的,默认的目标平台是i386-windows-pc。

  但是,添加一个选项来更改默认的目标平台目标三元组:-DLL VM _ default _ Target _ Triple=x86 _ 64-PC-Windows-MSVC

  我也尝试过使用MSVC的构建工具,但是好像忽略了Release的CMAKE_BUILD_TYPE设置。

  或者,直接打开x64原生的开发外壳。这样默认的主机是x64,构建的主机是64位,默认的目标平台是x86_64。

  另外,还可以选择生成Clang LLVM的安装目录。这意味着如果你想设置CMAKE_INSTALL_PREFIX变量,在Windows上默认设置为x:/program files(x86)/然后最后一次运行ninja install,你必须拥有管理员权限。作者没有做任何修改就构建了这个选项。

  总结一下,作者的CMake命令如下。

  cmake \-dll VM _ enable _ projects= clang;铿锵-工具-额外;libcxxlibcxxabilldldb \-dll VM _ default _ target _ triple=x86 _ 64-PC-windows-msvc \-g ninja _。/llvm _-DC制造bu build

  倪家则是一个漫长的建设过程。笔者的i7-1065U 16GB RAM用了2个小时左右。过程中没有错误。

  只有一些警告,因此可以在睡觉和休息时执行构建过程。

  施工结束后,安装准备就绪:

  Ninja install此时,我们可以将安装的Clang添加到环境变量中。之后,就可以在普通命令行上使用Clang了。

  但是如果我们要用CMake和Clang刚构建的作为编译器,就像前面说的,我们的PC上只安装了Visual Studio,它的环境变量默认是不暴露的。也就是说我们的PC默认打开一个终端,里面只有clang,lld等命令可用,需要额外安装CMake和构建工具。在这里,从010到59000,我们可以从其发布页面下载二进制,并将程序所在的目录添加到PATH中。

  之后,例如,您可以在Visual Studio代码上使用CMake插件来配置项目,而不会出现任何问题。

  如果发现忘记构建想要的工具函数,可以删除CMakeCache.txt,重新执行CMake和构建过程。

  此外,在第一个构建拥有lld之后,您可以使用lld作为链接器。

  第一种./llvm \-DLLVM _ ENABLE _ PROJECTS= clang;铿锵-工具-额外;libcxxlibcxxabilldlldb \-Ninja \-DC make _ build _ type=release \-dllvm _ use _ linker=lld \-dllvm _ parallel _ link _ jobs=8 \-dllvm _ default _ Target _ triple=x86 _ 64-PC-Windows-MSVC关于

  这里的目标不是指构建的“目标”,而是指“目标平台”。

  LLVM和GCC的一个很大的区别是,GCC需要为每个特定的架构独立生成一套交叉的工具链套件,比如arm/x86,而LLVM可以在一套工具链套件中支持多种架构。

  CMake在配置LLVM项目时,通过LLVM_TARGETS_TO_BUILD指定生成的LLVM可以支持的架构(这里指目标)。默认情况下,选择全部。有关详细信息,请参见LLVM文档。

  LLVM_DEFAULT_TARGET_TRIPLE:可以通过这个选项修改默认目标的三元组合。

  资料来源:https://zhuanlan.zhihu.com/p/263550372

  我编译的时候没有指定,结果如下:

  $ clang -vclang版本14 . 0 . 0(https://github.com/llvm/llvm-project.git a2a 826d 8 b 66 CFC 85499 a 92949767d 153563078 a 0)目标:i686-PC-Windows-MSVC线程模型:POSITINSTALLEDDIR:C:\ Program Files(x86)\ LLVM \ bin三元组的介绍在这里:3359crang.llvm.org/docs/crosscompilation.html #目标-三元组

  从LLVM的GettingStarted page这个例子我们知道,clang可以像gcc一样直接使用,来编译目标平台的可执行程序:

  你好。c-O hello.exe实际上是把生成的中间产品直接扔给llvm,最后得到目标平台的可执行程序。您可以使用emit-llvm参数跳过此过程。

  所以作者在使用上述命令时,实际上是针对i686-pc-windows-msvc编译的。您可以将- verbose参数传递给clang来查看这些细节。

  如果要生成x86_64平台的可执行程序,应该使用-target选项:

  clang hello . C-o hello . exe-target x86 _ 64-PC-Windows-MSVC根据LLVM的入门页面,LLVM非常依赖主机的C编译器。换句话说,即使Clang默认支持跨平台编译,也需要相应平台的头文件和库来生成可执行程序(正确进行系统调用等。).

  我们x86_64-pc-windows-msvc或者i386-pc-windows-msvc最后一个是msvc,就是开发需要windows的SDK。

  安装MSVC时,自然会安装Windows的SDK。如果没有安装Windows的SDK,或者想针对MinGW-w64的平台,需要把msvc改成gnu,Clang会在路径中寻找对应的包含路径和库。

  请参阅:3359 stack overflow . com/questions/39871656/how-to-use-clang-with-mingw-w64-headers-on-windows/47148323 # 47148323

  另请参见:

  https://zhuan LAN . zhi Hu . com/p/342916589https://marvinsblog . net/post/2019-01-08-clang-on-windows/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: