[轉]:內置變量與原生shell腳本運行

xmake在xmake.lua中提供了 $(varname) 的語法,來支持內置變量的獲取,例如:linux

add_cxflags("-I$(buildir)")

它將會在在實際編譯的時候,將內置的 buildir 變量轉換爲實際的構建輸出目錄:-I./buildgit

而且這些變量在自定義腳本中,也是能夠支持的,例如: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,來與一些第三方的工具進行配合使用。。


相關文章
相關標籤/搜索