歡迎您光臨本站 註冊首頁

xmake v2.3.6 釋出, 新增 fortran 編譯支援

←手機掃碼閱讀     admin @ 2020-07-29 , reply:0

這個版本重點對其他語言的支援做了一些改進,比如新增了fortran的編譯支援,zig語言的實驗性支援,另外對golang/dlang增加了第三方依賴包支援以及交叉編譯支援。

雖然,xmake重點關注c/c++的構建支援,但是其他語言的支援xmake也會不定期做一些改進,其主要目的並不是替代它們官方自身的構建系統,僅僅只是為了支援與c/c++的混合編譯,更好的為c/c++專案服務, 畢竟有些c/c++專案中,還是會偶爾呼叫其他語言的程式碼介面,比如與cuda, dlang, objc,swift, asm等語言的混合呼叫,所以xmake還是會對他們做一些基礎性的編譯支援。

另外,關於c/c++方面,我們也對vs預覽版中新的/sourceDependencies xxx.json輸出的標頭檔案依賴格式也做了支援(這對於多語言下,標頭檔案依賴檢測會更加的可靠穩定)。

新特性介紹

Fortran語言編譯支援

這個版本開始,我們已經完全支援使用gfortran編譯器來編譯fortran專案,我們可以透過下面的命令,快速建立一個基於fortran的空工程:


 $ xmake create -l fortran -t console test
 

它的xmake.lua內容如下:


 add_rules("mode.debug", "mode.release")
 
 target("test")
     set_kind("binary")
     add_files("src/*.f90")
 

更多程式碼例子可以到這裡檢視:Fortran Examples

Zig語言實驗性支援

注:目前這個語言xmake還在試驗性支援階段,還很不完善,比如:windows上不支援,linux/macOS下動態庫編譯還不支援,請自行評估使用。

我們可以透過下面的配置方式,嘗試性體驗下,至少linux/macOS下console和static library程式還是可以跑的。


 add_rules("mode.debug", "mode.release")
 
 target("test")
     set_kind("binary")
     add_files("src/*.zig")
 

至於為啥windows不支援呢,詳情見我之前提給zig的issues,#5825

而動態庫不支援,也是因為我躺了一些坑(zig生成的動態庫會自動追加.0.0.0),詳情見:issue 5827

另外還躺了下其他坑,個人感覺坑有點多,所以我暫時還是試驗階段,等過段時間再看看。

更多例子見:Zig Examples

Go依賴包和交叉編譯支援

新版本xmake對go構建支援繼續做了一些改進,比如對go的交叉編譯也進行了支援,例如我們可以在macOS和linux上編譯windows程式:


 $ xmake f -p windows -a x86
 

另外,新版本對go的第三方依賴包管理也進行了初步支援:


 add_rules("mode.debug", "mode.release")
 
 add_requires("go::github.com/sirupsen/logrus", {alias = "logrus"})
 add_requires("go::golang.org/x/sys/internal/unsafeheader", {alias = "unsafeheader"})
 if is_plat("windows") then
     add_requires("go::golang.org/x/sys/windows", {alias = "syshost"})
 else
     add_requires("go::golang.org/x/sys/unix", {alias = "syshost"})
 end
 
 target("test")
     set_kind("binary")
     add_files("src/*.go")
     add_packages("logrus", "syshost", "unsafeheader")
 

不過還有一些不完善的地方,比如目前必須手動配置所有級聯依賴包,會稍微繁瑣些,後續有待改進。

更多例子見:Go Examples

Dlang/Dub依賴包支援

xmake對dlang的dub包管理也進行了支援,可以快速整合dlang的第三方依賴包:


 add_rules("mode.debug", "mode.release")
 
 add_requires("dub::log 0.4.3", {alias = "log"})
 add_requires("dub::dateparser", {alias = "dateparser"})
 add_requires("dub::emsi_containers", {alias = "emsi_containers"})
 add_requires("dub::stdx-allocator", {alias = "stdx-allocator"})
 add_requires("dub::mir-core", {alias = "mir-core"})
 
 target("test")
     set_kind("binary")
     add_files("src/*.d")
     add_packages("log", "dateparser", "emsi_containers", "stdx-allocator", "mir-core")
 

cl.exe新的標頭檔案依賴檔案支援

msvc的標頭檔案依賴通常需要解析/showIncludes的輸出內容,提取裡面的includes檔案列表來處理依賴編譯問題,但是呢,cl.exe對這個的輸出做的很不好,includes資訊和編譯輸出是混在一起的。

對構建工具處理依賴解析非常不友好,尤其是多語言環境下,如何判斷是includes,需要透過前置的Note: including file: 字串來判斷提取,但中文下,又是注意: 包含檔案: , 如果換成日語環境,又是日文的字首字串,編碼格式問題、硬編碼問題導致解析處理上,總歸不是很完美。

關於這一點,最新的vs2019預覽版中,微軟終於對齊做了改進,透過新的/sourceDependencies xxx.json編譯選項,可以更好的輸出includes依賴資訊,方便多語言環境下的解析提取。

另外,這個新選項的輸出是獨立到單獨的json檔案中去的,終於不是跟編譯輸出混一起了,也終於不用痛苦地解析分離編譯錯誤、警告資訊、includes列表資訊了。

輸出內容大概長這樣:


 {
     "Version": "1.0",
     "Data": {
         "Source": "z:\\personal\\tbox\\src\\tbox\\tbox.c",
         "Includes": [
             "z:\\personal\\tbox\\src\\tbox\\tbox.h",
             "z:\\personal\\tbox\\src\\tbox\\prefix.h",
             "z:\\personal\\tbox\\src\\tbox\\prefix\\prefix.h",
             "z:\\personal\\tbox\\src\\tbox\\prefix\\config.h",
             "z:\\personal\\tbox\\src\\tbox\\config.h",
             ...
 

而新版本中,xmake透過新增內建的core.base.json模組處理json解析,很方便地對新的標頭檔案依賴資料進行解析和支援,優先使用此模式(如果cl是新版本支援的話,老版本cl還是使用/showIncludes)。

Xcode外掛生成支援

目前,我們還沒有時間去自己實現xcode工程的生成,但不代表不支援,因為xmake支援生成cmakelists.txt檔案,而cmake是支援xcode工程檔案生成的,在官方還沒有實現之前, 我們也可以透過cmake變相支援它,xmake會自動內部呼叫cmake中轉下生成結果,對使用者而言使用上沒啥區別,只需要確保cmake已經安裝即可:


 $ xmake project -k xcode
 

!> 等之後有時間,我們會重新自己實現各更加完善的xcode輸出外掛,也歡迎大家幫忙貢獻。

xmake-vscode外掛intellisense支援

近期,我們也更新了下xmake-vscode外掛,透過自動生成compile_commands.json到當前專案的.vscode目錄下,然後我們只需要配置.vscode/c_cpp_properties.json在裡面關聯上這個.vscode/compile_commands.json路徑 就能實現intellisense自動提示,同步xmake.lua裡面的includedirs等配置資訊。

至於,具體怎麼生成c_cpp_properties,官方文件裡面有詳細說明:https://code.visualstudio.com/docs/cpp/configure-intellisense-crosscompilation

裡面的主要配置項:


   "configurations": [
     {
       "compileCommands": ".vscode/compile_commands.json",
     }
   ],
 

更新內容

新特性

  • 新增xcode工程生成器外掛,xmake project -k cmake (當前採用cmake生成)
  • #870: 支援gfortran編譯器
  • #887: 支援zig編譯器
  • #893: 新增json模組
  • #898: 改進golang專案構建,支援交叉編譯
  • #275: 支援go包管理器去整合第三方go依賴包
  • #581: 支援dub包管理器去整合第三方dlang依賴包

改進

  • #868: 支援新的cl.exe的標頭檔案依賴輸出文件格式,/sourceDependencies xxx.json
  • #902: 改進交叉編譯工具鏈

[admin ]

來源:OsChina
連結:https://www.oschina.net/news/117548/xmake-2-3-6-released
xmake v2.3.6 釋出, 新增 fortran 編譯支援已經有17次圍觀

http://coctec.com/news/all/show-post-245770.html