xmake v2.2.2 釋出, 讓C/C++擁有包依賴自動構建
歷經四個多月, ofollow,noindex">xmake 終於更新了新版本v2.2.2,並且上線了重量級功能:原生支援的遠端依賴包管理。
而這個特性,其實我陸陸續續寫了將近一年的時間,才初步完成,對於此特性的開發進展和歷史,有興趣的同學可以看下相關issues: #69 。
目前的實現效果如下,完全一致的語義版本依賴描述:
完全一致的跨平臺構建行為,一鍵xmake編譯:
完整的專案描述:
add_requires("tbox 1.6.*", "libpng ~1.16", "zlib") target("test") set_kind("binary") add_files("src/*.c") add_packages("tbox", "libpng", "zlib")
我先簡單介紹下我做這個功能的背景:
我們在寫C/C++程式的時候,對於第三方依賴庫的使用一直是一個老大難問題,因為每個依賴庫的構建系統不同、程式碼平臺支援力度的差異,導致沒法像其他高階語言那樣有方便好用的包管理支援。
雖然現在已經有了homebrew, vcpkg等包管理工具來解決這一問題,但是多少都有一些侷限性,例如:
-
homebrew不支援iphoneos, android, windows平臺
-
vcpkg不支援語義版本選擇,多版本管理
-
另外都不支援專案管理和構建
對於目前現有的跨平臺構建工具,都缺少內建的包管理支援,像cmake僅提供了 find_package
去查詢系統包,雖然可以和vcpkg等第三方包管理配合使用,但我個人覺得並不是很方便。 這會使得專案的其他使用者在編譯的時候,額外要求去安裝vcpkg或者安裝依賴庫到系統上才行,對於pc平臺還好弄些,對於iphoneos, android等平臺的依賴庫,使用者就要折騰上一會了。
而xmake的理念就是: 真正的一致維護, 真正的一鍵編譯
-
構建行為的一致性: 不管你的專案是否有庫依賴,工具依賴,只需要執行一個
xmake
命令,即可編譯通過。 -
專案維護的一致性: 不管你的專案是在windows上用,還是給linux, iphone, android上用,都只需要一份xmake.lua維護專案即可。
而cmake還需要生成額外的第三方IDE工程檔案,即使cmakelist.txt相同,但是構建、維護體驗上對使用者來講都不可能保證完全一致,畢竟還受限於vc/make此類工具。
目前支援的特性
-
語義版本支援,例如:”>= 1.1.0 < 1.2”, “~1.6”, “1.2.x”, “1.*”
-
提供官方包倉庫、自建私有倉庫、專案內建倉庫等多倉庫管理支援
-
跨平臺包編譯整合支援(不同平臺、不同架構的包可同時安裝,快速切換使用)
-
debug依賴包支援,實現原始碼除錯
依賴包處理機制
這裡我們簡單介紹下整個依賴包的處理機制:
-
優先檢測當前系統目錄、第三方包管理下有沒有存在指定的包,如果有匹配的包,那麼就不需要下載安裝了 (當然也可以設定不使用系統包)
-
檢索匹配對應版本的包,然後下載、編譯、安裝(注:安裝在特定xmake目錄,不會干擾系統庫環境)
-
編譯專案,最後自動連結啟用的依賴包
新特性
-
新增fasm彙編器支援
-
新增
has_config
,get_config
和is_config
介面去快速判斷option和配置值 -
新增
set_config
介面去設定預設配置 -
新增
$xmake --try
去嘗試構建工程 -
新增
set_enabled(false)
去顯示的禁用target -
#69 : 新增遠端依賴包管理,
add_requires("tbox ~1.6.1")
-
#216 : 新增windows mfc編譯規則
改進
-
改進Qt編譯編譯環境探測,增加對mingw sdk的支援
-
在自動掃描生成的xmake.lua中增加預設debug/release規則
-
#178 : 修改mingw平臺下的目標名
-
對於
add_files()
在windows上支援大小寫不敏感路徑模式匹配 -
改進
detect.sdks.find_qt
對於Qt根目錄的探測 -
#184 : 改進
lib.detect.find_package
支援vcpkg -
#208 : 改進rpath對動態庫的支援
Bugs修復
-
#177 : 修復被依賴的動態庫target,如果設定了basename後連結失敗問題
-
修復
$xmake f --menu
中Exit問題以及cpu過高問題 -
#197 : 修復生成的vs201x工程檔案帶有中文路徑亂碼問題
-
修復WDK規則編譯生成的驅動在Win7下執行藍屏問題
-
#205 : 修復vcproj工程生成targetdir, objectdir路徑設定不匹配問題
更多詳細描述見文章: http://tboox.org/cn/2018/10/13/xmake-update-v2.2.2-package-deps/