[轉]:基於lua的跨平臺構建工具:xmake v2.0.2 發佈!

更新內容

此版本主要修復一些bug和兼容性問題。。linux

改進

  • 修改安裝和卸載的action處理android

  • 更新工程模板ios

  • 加強函數檢測c++

Bugs修復

  • #7: 修復用模板建立工程後,target名不對問題:'[targetname]'git

  • #9: 修復clang不支持c++11的問題github

  • 修復api做用域泄露問題macos

  • 修復在windows上的一些路徑問題swift

  • 修復檢測宏函數失敗問題windows

  • 修復檢測工具鏈失敗問題api

  • 修復windows上編譯android版本失敗

簡介

XMake是一個基於Lua的輕量級跨平臺自動構建工具,支持在各類主流平臺上構建項目

xmake的目標是開發者更加關注於項目自己開發,簡化項目的描述和構建,而且提供平臺無關性,使得一次編寫,隨處構建

它跟cmake、automake、premake有點相似,可是機制不一樣,它默認不會去生成IDE相關的工程文件,採用直接編譯,而且更加的方便易用
採用lua的工程描述語法更簡潔直觀,支持在大部分經常使用平臺上進行構建,以及交叉編譯

而且xmake提供了建立、配置、編譯、打包、安裝、卸載、運行等一些actions,使得開發和構建更加的方便和流程化。

不只如此,它還提供了許多更加高級的特性,例如插件擴展、腳本宏記錄、批量打包、自動文檔生成等等。。

若是你想要了解更多,請參考:

支持特性

  • 支持windows、mac、linux、ios、android等平臺,自動檢測不一樣平臺上的編譯工具鏈(也可手動配置)
    編譯windows項目採用原生vs的工具鏈,不須要使用cygwin、mingw(固然這些也支持)

  • 支持自定義平臺編譯配置,能夠很方便的擴展第三方平臺支持

  • 採用lua腳本語法描述項目,描述規則簡單高效,邏輯規則可靈活修改,而且不會生成相關平臺的工程文件,是工程更加簡單明瞭

  • 支持建立模板工程、配置項目、編譯項目、運行、打包、安裝和卸載等經常使用功能(後續還會增長:自動生成文檔、調試等模塊)

  • 支持編譯c/c++/objc/swift成靜態庫、動態庫、命令行可執行程序

  • 提供豐富的工程描述api,使用簡單靈活,例如添加編譯文件只需(還支持過濾排除):

add_files("src/*.c", "src/asm/**.S", "src/*.m")

  • 支持頭文件、接口、連接庫依賴、類型的自動檢測,並可自動生成配置頭文件config.h

  • 支持自定義編譯配置開關,例如若是在工程描述文件中增長了enable_xxx的開關,那麼配置編譯的時候就能夠手動進行配置來啓用它:

xmake config --enable_xxx=y

  • 提供一鍵打包功能,無論在哪一個平臺上進行打包,都只須要執行一條相同的命令,很是的方便

  • 支持全局配置,一些經常使用的項目配置,例如工具鏈、規則描述等等,均可以進行全局配置,這樣就不須要每次編譯不一樣工程,都去配置一遍

  • 除了能夠自動檢測依賴模塊,也支持手動強制配置模塊,還有各類編譯flags。

  • 支持插件擴展、平臺擴展、模板擴展、選項自定義等高級功能

  • 提供一些內置的經常使用插件(例如:自動生成doxygen文檔插件,宏腳本記錄和運行插件)

  • 宏記錄插件裏面提供了一些內置的宏腳本(例如:批量打包一個平臺的全部archs等),也能夠在命令行中手動記錄宏並回放執行

  • 提供強大的task任務機制

  • 不依賴makefile和make,實現直接編譯,內置自動多任務加速編譯, xmake是一個真正的構架工具,而不單單是一個工程文件生成器

  • 自動檢測ccache,進行自動緩存提高構建速度

經常使用Actions

  • config: 構建以前的編譯參數配置

  • global: 配置一些全局參數

  • build: 構建項目

  • clean: 清理一些二進制文件、臨時文件

  • create: 使用模板建立新工程

  • package: 打包指定目標

  • install: 安裝編譯後的目標文件

  • uninstall: 卸載安裝的全部文件

  • run: 運行可執行的項目目標

一些內置插件

  • doxygen文檔生成插件: 從指定源碼目錄生成doxygen文檔

  • 宏記錄腳本插件: 記錄和回放宏腳本,簡化重複的命令操做(例如:批量打包。。)

  • hello插件: 插件開發demo

  • 工程文件生成插件: 建立IDE的工程文件 (目前支持:makefile,後續支持:vs, xcode等等)

支持編譯語言

  • C/C++

  • Objc/Objc++

  • Swift

  • Assembly

支持的構建平臺

  • Windows (x86, x64, amd64, x86_amd64)

  • Macosx (i386, x86_64)

  • Linux (i386, x86_64, cross-toolchains ...)

  • Android (armv5te, armv6, armv7-a, armv8-a, arm64-v8a)

  • iPhoneos (armv7, armv7s, arm64, i386, x86_64)

  • Watchos (armv7k, i386)

  • Mingw (i386, x86_64)

後續計劃

  • 自動包依賴管理和下載

  • 建立移植倉庫,實現一人移植,多人共享

  • 更多的插件開發

  • 自動生成vs,xcode等工程文件

簡單例子

建立一個c++ console項目:

xmake create -l c++ -t 1 console
 or xmake create --language=c++ --template=1 console

工程描述文件:xmake.lua

target("console")
    set_kind("binary")
    add_files("src/*.c")

配置工程:

這個是可選的步驟,若是隻想編譯當前主機平臺的項目,是能夠不用配置的,默認編譯release版本。

xmake f -p iphoneos -m debug
or xmake f --plat=macosx --arch=x86_64
or xmake f -p windows
or xmake config --plat=iphoneos --mode=debug
or xmake config --plat=android --arch=armv7-a --ndk=xxxxx
or xmake config -p linux -a i386
or xmake config -p mingw --cross=i386-mingw32- --toolchains=/xxx/bin
or xmake config -p mingw --sdk=/mingwsdk
or xmake config --help

編譯工程:

xmake
or xmake -r
or xmake --rebuild

運行目標:

xmake r console
or xmake run console

打包全部:

xmake p
or xmake package
or xmake package console
or xmake package -o /tmp
or xmake package --output=/tmp

經過宏腳本打包全部架構:

xmake m package 
or xmake m package -p iphoneos
or xmake m package -p macosx -f "-m debug" -o /tmp/
or xmake m package --help

安裝目標:

xmake i
or xmake install
or xmake install console
or xmake install -o /tmp
or xmake install --output=/tmp

詳細使用方式和參數說明,請參考文檔
或者運行:

xmake -h
or xmake --help
or xmake config --help
or xmake package --help
or xmake macro --help
...

一些使用xmake的項目:

簡單例子

-- the debug mode
if is_mode("debug") then
    
    -- enable the debug symbols
    set_symbols("debug")

    -- disable optimization
    set_optimize("none")
end

-- the release mode
if is_mode("release") then

    -- set the symbols visibility: hidden
    set_symbols("hidden")

    -- enable fastest optimization
    set_optimize("fastest")

    -- strip all symbols
    set_strip("all")
end

-- add target
target("test")

    -- set kind
    set_kind("static")

    -- add files
    add_files("src/*.c")

相關文章
相關標籤/搜索