xmake v2.3.8 發佈, 新增 Intel C++/Fortran 編譯器支持

xmake 是一個基於 Lua 的輕量級跨平臺構建工具,使用 xmake.lua 維護項目構建,相比 makefile/CMakeLists.txt,配置語法更加簡潔直觀,對新手很是友好,短期內就能快速入門,可以讓用戶把更多的精力集中在實際的項目開發上。html

在這個新版本中,咱們對 Intel 系列的 C++ 和 Fortran 編譯器作了全平臺支持,而且改進了上個版本新加的 Wasm 工具鏈支持,同時對 Qt SDK for Wasm 也進行了支持。linux

另外,咱們還將 luajit 升級到最新的 v2.1 版本,在跨平臺方面,xmake 也作了很大的完善,增長了 mips64 架構的運行支持。android

新特性介紹

Intel C++ 編譯器支持

這個版本上,咱們對 Intel 系列的 C++ 編譯器作了全平臺支持,包括 windows上的 icl 以及 linux/macOS 下的 icc/icpc。c++

要想啓用 Intel C++ 編譯器,咱們只須要在安裝了的 Intel 編譯器的系統上,經過 --toolchain=icc 參數切換到對應的工具鏈便可。git

$ xmake f --toolchain=icc
$ xmake

Intel Fortran 編譯器支持

以前的版本,xmake 僅僅支持 gfortran 編譯器,而這個版本,咱們也支持了 Intel Fortran 編譯器,也就是 ifort,咱們也只須要切換到對應的 ifort 工具鏈便可使用。github

$ xmake f --toolchain=ifort
$ xmake

Wasm 平臺和 Qt/Wasm 支持

上個版本,咱們新增了 --toolchain=emcc 工具鏈來支持 wasm 程序的編譯,可是僅僅指定工具鏈,並不能很好的調整目標程序的擴展名,例如對 *.js*.wasm 的文件生成。windows

而新版本,咱們繼續新增了 xmake f -p wasm 平臺,內置啓用 emcc 工具鏈,而且再次基礎上對周邊的配置作了更好的完善。xcode

只要切換到 wasm 平臺,xmake 會默認生成 *.js 以及對應 *.wasm 等目標文件,還會額外生成能夠加載 js 來運行 wasm 程序的 *.html 頁面。bash

另外,咱們還對 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.openmpc++.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/...

相關文章
相關標籤/搜索