此版本主要增長xmake f --menu
實現用戶自定義圖形菜單配置,界面風格相似linux的make menuconfig
:html
更多使用說明,請閱讀:文檔手冊。linux
del_files()
接口去從已添加的文件列表中移除一些文件rule()
, add_rules()
接口實現自定義構建規則,而且改進add_files("src/*.md", {rule = "markdown"})
os.filesize()
接口core.ui.xxx
等cui組件模塊,實現終端可視化界面,用於實現跟用戶進行短暫的交互xmake f --menu
實現可視化菜單交互配置,簡化工程的編譯配置set_values
接口到optionxmake f --cc=gcc@ccmips.exe
add_cxflags
等flags api的設置,添加force參數,來禁用自動檢測和映射,強制設置選項:add_cxflags("-DTEST", {force = true})
add_files
的flags設置,添加force域,用於設置不帶自動檢測和映射的原始flags:add_files("src/*.c", {force = {cxflags = "-DTEST"}})
os.nuldev()
在mingw上傳入gcc時出現問題xmake f --cross
沒法配置問題os.cd
到windows根路徑問題del_files
接口實現從源文件列表中刪除指定文件經過此接口,能夠從前面add_files接口添加的文件列表中,刪除指定的文件,例如:github
target("test") add_files("src/*.c") del_files("src/test.c")
上面的例子,能夠從src
目錄下添加除test.c
之外的全部文件,固然這個也能夠經過add_files("src/*.c|test.c")
來達到相同的目的,可是這種方式更加靈活。windows
例如,咱們能夠條件判斷來控制刪除哪些文件,而且此接口也支持add_files的匹配模式,過濾模式,進行批量移除。api
target("test") add_files("src/**.c") del_files("src/test*.c") del_files("src/subdir/*.c|xxx.c") if is_plat("iphoneos") then add_files("xxx.m") end
經過上面的例子,咱們能夠看出add_files
和del_files
是根據調用順序,進行順序添加和刪除的,而且經過del_files("src/subdir/*.c|xxx.c")
刪除一批文件,
而且排除src/subdir/xxx.c
(就是說,不刪除這個文件)。markdown
rule()
接口實現用戶自定義編譯規則在2.1.9版本以後,xmake不只原生內置支持多種語言文件的構建,並且還能夠經過自定義構建規則,讓用戶本身來實現複雜的未知文件構建。iphone
咱們能夠經過預先設置規則支持的文件後綴,來擴展其餘文件的構建支持:工具
-- 定義一個markdown文件的構建規則 rule("markdown") set_extensions(".md", ".markdown") on_build(function (target, sourcefile) os.cp(sourcefile, path.join(target:targetdir(), path.basename(sourcefile) .. ".html")) end) target("test") set_kind("binary") -- 使test目標支持markdown文件的構建規則 add_rules("markdown") -- 添加markdown文件的構建 add_files("src/*.md") add_files("src/*.markdown")
咱們也能夠指定某些零散的其餘文件做爲markdown規則來處理:ui
target("test") -- ... add_files("src/test/*.md.in", {rule = "markdown"})
<p class="tips">
經過add_files("*.md", {rule = "markdown"})
方式指定的規則,優先級高於add_rules("markdown")
設置的規則。
</p>
咱們還能夠實現規則的級聯構建,例如在構建man規則後,繼續調用markdown規則,實現級聯構建:
rule("man") add_imports("core.project.rule") on_build(function (target, sourcefile) rule.build("markdown", target, sourcefile) end)
對於有些文件,須要支持多文件構建生成單一對象的模式,能夠經過on_build_all來實現:
rule("man") on_build_all(function (target, sourcefiles) -- build some source files for _, sourcefile in ipairs(sourcefiles) do -- ... end end) target("test") -- ... add_files("src/test/*.doc.in", {rule = "man"})
xmake f --menu
實現可視化菜單配置以前的版本,使用option可實現命令行菜單選項的用戶自定義,當工程配置至關多的狀況下,採用這種命令行配置的方式就不是很靈活了。
所以在2.1.9版本中,咱們擴展了option,使其原生支持xmake f --menu
的圖形化配置界面,實現複雜的分級配置,而且支持配置的模糊查找和定位,配置項目更加靈活方便。
咱們能夠經過set_category設置option的分級路徑名set_category("root/submenu/submenu2")
,例如:
-- 'boolean' option option("test1") set_default(true) set_showmenu(true) set_category("root menu/test1") -- 'choice' option with values: "a", "b", "c" option("test2") set_default("a") set_values("a", "b", "c") set_showmenu(true) set_category("root menu/test2") -- 'string' option option("test3") set_default("xx") set_showmenu(true) set_category("root menu/test3/test3") -- 'number' option option("test4") set_default(6) set_showmenu(true) set_category("root menu/test4")
上述配置最後顯示的菜單界面路徑結構:
root menu
test3
效果圖以下:
而且咱們還能夠經過set_values,提供選項值列表供用戶快速選擇使用,例如:
option("test") set_default("b") set_showmenu(true) set_values("a", "b", "c")
效果圖以下: