xmake 是一个基于 Lua 的轻量级跨平台构建工具,应用 xmake.lua 保护我的项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对老手十分敌对,短时间内就能疾速入门,可能让用户把更多的精力集中在理论的我的项目开发上。
在这个新版本中,咱们对 Intel 系列的 C++ 和 Fortran 编译器做了全平台反对,并且改良了上个版本新加的 Wasm 工具链反对,同时对 Qt SDK for Wasm 也进行了反对。
另外,咱们还将 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
页面。
另外,咱们还对 Qt SDK for Wasm 也做了反对,比方咱们创立一个 Qt QuickApp 工程。
$ xmake create -t qt.quickapp_static quickapp
这里,咱们留神到,咱们创立的是须要动态 link 的 Qt 工程,因为 wasm 版本的 Qt 库,咱们须要强制动态链接到程序能力失常应用。
生成的工程文件 xmake.lua 内容大略如下:
add_rules("mode.debug", "mode.release")
includes("qt_add_static_plugins.lua")
target("demo")
add_rules("qt.quickapp_static")
add_headerfiles("src/*.h")
add_files("src/*.cpp")
add_files("src/qml.qrc")
add_frameworks("QtQuickControls2", "QtQuickTemplates2")
qt_add_static_plugins("QtQuick2Plugin", {linkdirs = "qml/QtQuick.2", links = "qtquick2plugin"})
qt_add_static_plugins("QtQuick2WindowPlugin", {linkdirs = "qml/QtQuick/Window.2", links = "windowplugin"})
qt_add_static_plugins("QtQuickControls2Plugin", {linkdirs = "qml/QtQuick/Controls.2", links = "qtquickcontrols2plugin"})
qt_add_static_plugins("QtQuickTemplates2Plugin", {linkdirs = "qml/QtQuick/Templates.2", links = "qtquicktemplates2plugin"})
下面的配置中,咱们除了启用 qt.quickapp_static
编译规定,还通过 qt_add_static_plugins
配置了一些必须的 Qt 插件。
接下来,咱们只须要切换到 wasm 平台,并确保 Qt SDK 已设置,即可实现编译。
$ xmake f -p wasm [--qt=~/Qt]
$ xmake
实现编译后,xmake 会在 build 目录下生成 demo.html 以及对应的 demo.js/demo.wasm 程序,咱们关上 demo.html 页面即可运行咱们编译的 Qt 程序,显示成果如下图:
对于 Qt/Wasm 更加具体的阐明,见:Issue #956
新增 Math/Float-point 编译优化设置
咱们新增了一个 set_fpmodels()
设置接口,用于设置浮点的编译模式,对数学计算相干优化的编译形象设置,提供:fast, strict, except, precise 等几种罕用的级别,有些可同时设置,有些是有抵触的,最初设置的失效。
对于这些级别的阐明,能够参考下微软的文档:Specify floating-point behavior
当然,对应 gcc/icc 等其余编译器,xmake 会映射到不同的编译 flags。
set_fpmodels("fast")
set_fpmodels("strict")
set_fpmodels("fast", "except")
set_fpmodels("precise") -- default
对于这块详情见:Issue #981
OpenMP 反对
为了更加形象简略的启用 openmp 个性,咱们能够通过新增的 c.openmp
和 c++.openmp
这两个规定来设置,另外 linux、macOS 上咱们须要额定的 libomp 库才行,因而能够通过 add_requires("libomp")
来疾速援用和集成。
add_requires("libomp", {optional = true})
target("loop")
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
和 /std:c17
也做了适配和反对。
咱们只须要简略的设置:
set_languages("c17")
即可启用 c17 规范来编译,即便低版本 msvc 等编译器不反对,xmake 也会主动疏忽设置。
更好的 Mingw 反对
对于这块的改良,波及几个方面,首先是 Windows 下 Mingw SDK 根目录的主动探测的改良,大部分状况下,咱们都不须要额定配置 --mingw=
参数显式指定门路,也可能自动检测到了。
对于这块详情,见:Issue #977
另外,除了 Msys2/Mingw 还有 macOS,linux/Mingw,咱们在新版本中还额定反对了 llvm-mingw 这个 SDK,使得咱们能够应用 mingw 来编译 arm/arm64 架构的程序。
$ xmake f -p mingw -a arm64
$ xmake
另外,在近程依赖包的主动编译集成上,当初带有 cmakelists 的第三方库,即便是 mingw 平台,xmake 也能主动编译集成进来间接应用,十分的疾速不便。
而最近 xmake-repo 官网 C/C++ 包仓库中,咱们也新增支出了不少反对 mingw 平台的新库,可间接应用。
更好的跨平台运行
咱们新增了对 mips64 架构的 linux 零碎运行反对,另外改良了 arm/arm64 下 xmake 的运行稳定性,通过合入最新的 luajit v2.1,解决了很多 luajit 遗留的问题,比方 arm64 下 lightuserdata 的 bad pointer 等问题。
新增 macOS Sierra for arm64 反对
xmake 还对最新的 Xcode-beta 进行了适配,新增了 macOs for arm64 的目标程序编译反对,只须要切到 arm64 架构编译即可。
$ xmake f -a arm64 [--xcode=Applications/Xcode-beta.app/]
$ xmake
当然,前提是在 macOS 下运行,并且应用最新反对 Developer Transition Kit (DTK) 的 Xcode-beta 版本才行。
官网仓库收录更多的 C/C++ 库
在 xmake 的官网 C/C++ 仓库 xmake-repo 中,咱们最近新增了几十个罕用的 C/C++ 库,并且还对 libx11 系列的库都全副进行了收录。
尽管,仓库的包保护工作量微小,然而目前的发展趋势也日趋沉闷,咱们收到了越来越多的用户对仓库包的奉献和改良保护。
并且,当初咱们的官网仓库曾经能够疾速集成:linux, macOS, windows, mingw, bsd, msys, iphoneos, android 等八大罕用平台的库,实现真正的跨平台 C/C++ 近程依赖库集成和应用反对。
目前咱们收录的一些包列表和反对平台,能够从这里查看:PKGLIST.md
咱们始终在致力解决 C/C++ 库生态的芜杂、集成应用繁琐等问题,提供疾速统一的主动集成和编译计划,xmake 不仅反对 vcpkg/conan/clib/homebrew 等第三方官网仓库包的集成,并且也在致力欠缺自建的官网仓库,实现更好的集成体验。
例如:
add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-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 update
sudo apt install xmake
同时,咱们也将包提交到了 Copr 包治理仓库,使得咱们也能够在 Fedora, RHEL,OpenSUSE,CentOS 等发行版中,通过 dnf 来疾速装置 xmake。
sudo dnf copr enable waruqi/xmake
sudo dnf install xmake
入门课程
近期,咱们也上线了官网的 xmake 入门课程,Xmake 带你轻松构建 C/C++ 我的项目 以边学边做试验的形式疾速学习 xmake 的应用。
更新内容
新个性
- #955: 增加 Zig 空工程模板
- #956: 增加 Wasm 编译平台,并且反对 Qt/Wasm SDK
- 降级 luajit 到 v2.1 最新分支版本,并且反对 mips64 上运行 xmake
- #972: 增加
depend.on_changed()
去简化依赖文件的解决 - #981: 增加
set_fpmodels()
去抽象化设置 math/float-point 编译优化模式 - #980: 增加对 Intel 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: 改良 find_mingw 在 windows 上的探测
- #978: 改良工具链的 flags 程序
- 改良 XCode 工具链,反对 macOS/arm64
Bugs 修复
- #951: 修复 emcc (WebAssembly) 工具链在 windows 上的反对
- #992: 修复文件锁偶然关上失败问题
https://tboox.org/cn/2020/10/…