xmake在xmake.lua中提供了 $(varname)
的語法,來支持內置變量的獲取,例如:linux
add_cxflags("-I$(buildir)")
它將會在在實際編譯的時候,將內置的 buildir
變量轉換爲實際的構建輸出目錄:-I./build
git
而且這些變量在自定義腳本中,也是能夠支持的,例如:github
target("test") after_build(target) print("build ok for $(plat)!") end
這將會在編譯完後,輸出:sql
build ok for macosx!
這些內置變量,大部分都是經過配置的時候,緩存的配置參數中獲取,例如:shell
$ xmake config --plat=macosx
也有些內置變量,不須要經過配置中獲取到,例如:macos
print("$(os)") print("$(host)") print("$(tmpdir)") print("$(curdir)")
等等,這些都是爲了讓xmake的語法更加簡潔,例如操做文件複製的時候,只須要:緩存
os.cp("$(projectdir)/file", "$(tmpdir)")
而不須要:bash
-- 導入工程模塊 import("core.project.project") -- 複製文件 os.cp(path.join(project.directory(), "file"), os.tmpdir())
這樣比較繁瑣下,可是有些複雜功能,可能仍是得這麼處理比較靈活,這就得看具體需求了。。工具
除了內置的變量處理,xmake還支持原生shell的運行,來處理一些xmake內置不支持的功能ui
例如,如今有個需求,我想用在編譯linux程序時,調用pkg-config
獲取到實際的第三方連接庫名,能夠這麼作:
target("test") set_kind("binary") if is_plat("linux") then add_ldflags("$(shell pkg-config --libs sqlite3)") end
固然,xmake有本身的自動化第三庫檢測機制,通常狀況下不須要這麼麻煩,並且lua自身的腳本化已經很不錯了。。
可是這個例子能夠說明,xmake是徹底能夠經過原生shell,來與一些第三方的工具進行配合使用。。