
Xmake v2.3.8发布,增加了英特尔C /Fortran编译器支持
Xmake是基于Lua的轻量级跨平台构建工具,使用xmake.lua来维护项目构建。与makefile/CMakeLists.txt相比,配置语法更简单直观,对初学者非常友好。它可以在短时间内快速启动,使用户能够更加专注于实际的项目开发。
在这个新版本中,我们在所有平台上支持英特尔系列的c和Fortran编译器,完善了上一版本中新增的Wasm工具链的支持,同时也支持针对Wasm的Qt SDK。
此外,我们还将luajit升级到最新的v2.1版本,xmake也在跨平台方面做了很大的改进,增加了mips64架构的运行支持。
项目源代码
官方文件
入门课程
新特性介绍
Intel C++ 编译器支持
在这个版本中,我们支持Intel系列的c编译器,包括windows上的icl和linux/macOS上的icc/icpc。
要启用Intel C编译器,我们只需通过安装了Intel编译器的系统上的- toolchain=icc参数切换到相应的工具链。
$ xmake f – toolchain=icc
$ xmake
Intel Fortran 编译器支持
在之前的版本中,xmake只支持gfortran编译器,但是在这个版本中,我们也支持Intel Fortran编译器,也就是ifort,我们只需要切换到相应的ifort工具链就可以使用了。
$ xmake f – toolchain=ifort
$ xmake
Wasm 平台和 Qt/Wasm 支持
在上一个版本中,我们增加了- toolchain=emcc工具链来支持wasm程序的编译,但是只指定工具链并不能很好的调整目标程序的扩展,比如*的文件生成。js和* .wasm。
在新版本中,我们继续添加了xmake f -p wasm平台,内置emcc工具链,并再次改进了外设配置。
只要切换到wasm平台,xmake就会生成*。js和相应的目标文件,如*。默认情况下为wasm,另外生成*。可以加载js运行wasm程序的html页面。
此外,我们还为Wasm支持Qt SDK,比如我们创建了一个Qt QuickApp项目。
$ xmake create-t Qt . quick app _ static quick app
在这里,我们注意到我们正在创建一个需要静态链接的Qt项目。由于Qt库的wasm版本,我们需要强制静态链接到程序,以便正常使用它。
生成的工程文件xmake.lua大致如下:
add_rules(‘mode.debug ‘,’ mode.release ‘)
包括(‘ qt_add_static_plugins.lua ‘)
目标(‘演示’)
add_rules(‘qt.quickapp_static ‘)
add_headerfiles(‘src/*。h ‘)
add_files(‘src/*。CPP’)
add_files(‘src/qml.qrc ‘)
add _ frameworks(‘ QtQuickcontrols 2 ‘,’ QtQuickTemplates2 ‘)
Qt _ add _ static _ plugins(‘ qtquick 2 plugin ‘,{linkdirs=’qml/QtQuick.2 ‘,links=’ qtquick2plugin ‘ })
Qt _ add _ static _ plugins(‘ QtQuick 2 window plugin ‘,{ link dirs=’ qml/QtQuick/Window . 2 ‘,links=’ windowplugin ‘ })
Qt _ add _ static _ plugins(‘ qtquickcontrols 2 plugin ‘,{ link dirs=’ qml/QtQuick/controls . 2 ‘,links=’ qtquickcontrols2plugin ‘ })
Qt _ add _ static _ plugins(‘ QtQuickTemplates 2 plugin ‘,{ link dirs=’ qml/QtQuick/Templates . 2 ‘,link=’ QtQuickTemplates 2 plugin ‘ })
在上面的配置中,我们不仅启用了qt.quickapp_static编译规则,还通过qt_add_static_plugins配置了一些必要的qt插件。
接下来,我们只需要切换到wasm平台,确定Qt SDK设置好了,就可以完成编译了。
$ xmake f -p wasm [ – qt=~/Qt]
$ xmake
编译后,xmake将在构建目录中生成demo.html和相应的demo.js/demo.wasm程序。我们可以打开demo.html页面运行我们编译的Qt程序,显示效果如下:
有关Qt/Wasm的更详细描述,请参见:第956期
新增 Math/Float-point 编译优化设置
我们增加了set_fpmodels()设置界面,用于设置浮点的编译模式,设置数学计算相关优化的编译抽象。它提供了几个常用的级别,比如快、严、除、精,有的可以同时设置,有的冲突,最后设置生效。
有关这些级别的描述,请参考微软的文档:指定浮点行为
当然,与gcc/icc等其他编译器相对应,xmake映射到不同的编译标志。
set_fpmodels(‘fast ‘)
set_fpmodels(‘strict ‘)
set_fpmodels(‘fast ‘,’ except ‘)
set_fpmodels(‘精确’)-默认值
请参阅:第981期,了解这篇文章的详情
OpenMP 支持
为了使openmp特性更抽象、更简单,我们可以通过增加两个新的规则来设置,c.openmp和c .openmp,另外在linux和macOS上需要额外的libomp库,可以通过add _ requires(‘ LIBOMP ‘)快速引用和集成。
add_requires(‘libomp ‘,{optional=true})
目标(‘循环’)
set_kind(‘binary ‘)
add_files(‘src/*。CPP’)
add_rules(‘c .openmp ‘)
add_packages(‘libomp ‘)
如果是c代码,应该启用add _ rules(‘ c . openmp ‘);在c/c混合编译的情况下,应该设置这两个规则。
c11/c17 的支持
在新版本中,xmake还改进了set_languages,增加了新的c11/c17设置,并且还改编和支持了msvc最新版本提供的/std:c11和/std3360c17。
我们只需要一个简单的设置:
set_languages(‘c17 ‘)
您可以启用c17标准进行编译,即使编译器(如较低版本的msvc)不支持,xmake也会自动忽略这些设置。
更好的 Mingw 支持
这一块的改进涉及到几个方面。一是Windows下Mingw SDK根目录自动检测的改进。在大多数情况下,我们不需要额外的配置——Mingw=参数明确指定路径,也可以自动检测。
参见:第977期,了解这件作品的详情
另外,除了Mys2/Mingw之外,还有macOS,linux/Mingw,新版本我们也支持llvm-mingw SDK,这样我们就可以用Mingw来编译arm/arm64架构的程序了。
$ xmake f -p mingw -a arm64
$ xmake
另外,在远程依赖包的自动编译和集成中,xmake可以自动编译和集成,直接与cmakelists的第三方库使用,甚至在mingw平台上使用,非常快捷方便。
最近在xmake-repo的官方C/C包仓库里,我们也新增了很多支持mingw平台的库,可以直接使用。
更好的跨平台运行
我们增加了对mips64架构的linux系统运行支持,提高了arm/arm64下xmake的运行稳定性。通过结合最新的luajit v2.1,我们解决了luajit留下的很多问题,比如arm64下的lightuserdata的坏指针。
新增 macOS Sierra for arm64 支持
Xmake也适应了最新的Xcode-beta,增加了对arm64的macOs的目标程序编译支持,只需要切换到arm64架构就可以编译。
$ xmake f-a arm 64[-Xcode=Applications/Xcode-beta . app/]
$ xmake
当然,前提是在macOS下运行,使用支持开发者过渡套件(DTK)的最新Xcode-beta版本。
官方仓库收录更多的 C/C++ 库
在xmake的官方C/C仓库xmake-repo中,我们最近增加了几十个常用的C/C库,libx11系列的所有库都包含在内了。
虽然仓库包装维护工作量巨大,但目前的发展趋势越来越活跃,我们收到了越来越多用户对仓库包装维护和改进的贡献。
此外,我们的官方仓库可以快速集成Linux、MAC OS、windows、mingw、BSD、msys、iphone OS、Android等8个常用平台的库,实现真正的跨平台C/C远程库集成和使用支持。
目前我们已经收录了一些包列表和支持平台,可以在这里查看:PKGLIST.md
我们一直在努力解决C/C库生态凌乱、集成使用繁琐等问题,提供快速一致的自动集成编译方案。xmake不仅支持vcpkg/conan/clib/homebrew等第三方官方仓库包的集成,还努力完善自建官方仓库,实现更好的集成体验。
例如:
add_requires(‘tbox 1.6.1 ‘,’ libuv master ‘,’ vcpkg:ffmpeg ‘,’ brew : PCR 2/lib PCR 2-8 ‘)
add _ requires(‘ Conan : open SSL/1 . 1 . 1g ‘,{alias=’openssl ‘,optional=true,debug=true})
目标(‘测试’)
set_kind(‘binary ‘)
add_files(‘src/*。c ‘)
add_packages(‘tbox ‘,’ libuv ‘,’ vcpkg:ffmpeg ‘,’ brew : PCR 2/lib PCR 2-8 ‘,’ openssl ‘)
带有vcpkg:brew:conan:等命名空间的包会自动切换到对应的第三方包仓库下载集成,而tbox 1.6.1等默认库会默认使用xmake-repo官方仓库提供的包。
使用和集成完全一样,xmake会自动下载,编译,集成,链接。
有关远程包的依赖集成的更多细节,我们可以查看相关文档:远程依赖库集成和使用
同时,我们也欢迎更多人的参与,帮助完善C/C图书馆生态的建设,提供简洁一致的图书馆体验。相信C/C包管理和库生态并不比Rust/Go差。
更多的发行版安装支持
在新版本中,我们将xmake提交给了Ubuntu PPA源代码,所以除了现有的脚本安装方法之外,我们还可以通过apt快速安装xmake。
sudo add-apt-repository PPA : xmake-io/xmake
sudo apt更新
sudo apt安装xmake
同时,我们还将包提交给了Copr包管理仓库,这样我们就可以通过dnf在Fedora、RHEL、OpenSUSE、CentOS等发行版中快速安装xmake。
sudo dnf copr使能waruqi/xmake
sudo dnf安装xmake
入门课程
最近我们也推出了官方的xmake入门课程,xmake会帮你轻松搭建一个C/C项目,边学边做实验,快速学习Xmake的使用。
更新内容
新特性
#955:添加锯齿形空工程模板
#956:添加Wasm编译平台,支持Qt/Wasm SDK
将luajit升级到最新的分支版本2.1,并支持运行在mips64上的xmake
#972:添加依赖项_已更改()以简化相关文件的处理
#981:添加set_fpmodels()来抽象和设置数学/浮点编译优化模式
#980:为英特尔C/C和Fortran编译器添加完整的平台支持
#986:为16.8以上的msvc编译器添加了c11/c17支持
#979:为OpenMP添加跨平台抽象配置。add_rules(‘c .openmp ‘)
改进
#958:改进的mingw平台,增加对llvm-mingw工具链和arm64/arm架构的支持
添加add_requires(‘zlib~xxx ‘)模式可以支持同一个包同时安装多个配置,作为一个独立的包存在
#977:提高windows上find_mingw的检测
#978:改进工具链的标志顺序
改进的XCode工具链,支持macOS/arm64
Bugs 修复
#951:修复windows上对emcc (WebAssembly)工具链的支持
#992:修复文件锁偶尔无法打开