xmake高级特性之自定义选项
xmake還可以支持一些自定義選項開關,使得工程支持可選編譯,方便工程的模塊化管理。
增加自定義編譯開關
我們拿一個實際的例子來說:
我們想在自己的工程中增加一個新開關選項:hello, 如果這個開關被啟用,會在target中添加特定的一些源碼文件,但是這個開掛默認是不被啟用的,需要通過配置xmake f --hello=true才會被鏈接和使用
并且使用的時候,需要定義一些特殊的宏定義:-DHELLO_TEST -DHELLO_ENABLE
那么我們開始進行xmake.lua修改,過程并不復雜:
在xmake.lua的頭部通過add_option接口定義一個名叫hello的開關選項
將定義好的hello開關選項,與你的target項目進行綁定
ok了,只要兩步,接下來就是編譯了:
-- 直接編譯,默認是禁用hello的,所以hello的相關代碼,都沒有被編譯進去 xmake -- 接下來我們啟用它,重新編譯下,這個時候,hello/*.c的代碼也被編譯進去了,同時-DHELLO_TEST -DHELLO_ENABLE也被添加到編譯選項中了 xmake f --hello=true xmake -r很方便吧。。只需兩步就行。。接下來,我們再稍微修飾下:
add_option("hello")-- 默認禁用這個開關,需要手動xmake f --hello=true才會啟用,當然你也可以默認啟用它set_option_enable(false)-- 定義一些宏開關,這個只有在hello被啟用的時候才會被定義add_option_defines_if_ok("HELLO_ENABLE", "HELLO_TEST")-- 啟用顯示菜單,這樣xmake f --help的時候,你這個新加的開關就會被顯示出來set_option_showmenu(true)-- 對菜單中開關進行分類,這樣顯示的時候 布局會更好看,這個不是必須的set_option_category("module_xxx")-- 在菜單中,對這個開關進行詳細描述set_option_description("Enable or disable the hello module")這個時候,你再敲下:
xmake f --help會顯示如下菜單信息:
此處省略...--hello=HELLO Enable or disable the hello module (default: false)此處省略...這樣給別人看的時候,也就更明了些。。。
自動檢測機制
接下來,我們整的稍微復雜些,讓這個hello被啟用的時候,自動鏈接上libhello.a庫,并且可以對libhello.a進行自動檢測,如果不存在,就禁用hello開關。。
修改如下:
add_option("hello")-- 默認禁用這個開關,需要手動xmake f --hello=true才會啟用,當然你也可以默認啟用它set_option_enable(false)-- 定義一些宏開關,這個只有在hello被啟用的時候才會被定義add_option_defines_if_ok("HELLO_ENABLE", "HELLO_TEST")-- 啟用顯示菜單,這樣xmake f --help的時候,你這個新加的開關就會被顯示出來set_option_showmenu(true)-- 在菜單中,對這個開關進行詳細描述set_option_description("Enable or disable the hello module")-- 添加鏈接庫libhello.a,這個在xmake f 會去自動檢測,如果檢測鏈接不通過,那么這個開關就會被禁用掉-- 如果ok,編譯的時候會自動加上-lhelloadd_option_links("hello")-- 添加鏈接庫檢測搜索目錄,如果路徑不對,檢測就會鏈接不通過,如果ok,在編譯的時候,會自動加上-L./libsadd_option_linkdirs("libs")修改后,如果這個hello開關被手動啟用,或者自動檢測通過,會在編譯連接的時候,自動加上-L./libs -lhello的連接選項。
增加一些其他的檢測規則
針對自動檢測,除了可以檢測鏈接庫,還可以增加一些其他的檢測規則:
檢測頭文件是否能夠正常包含
類型定義是否存在
接口api是否存在
檢測鏈接庫是否能夠正常鏈接
例如:
add_option("hello")-- 默認禁用這個開關,需要手動xmake f --hello=true才會啟用,當然你也可以默認啟用它set_option_enable(false)-- 定義一些宏開關,這個只有在hello被啟用的時候才會被定義add_option_defines_if_ok("HELLO_ENABLE", "HELLO_TEST")-- 啟用顯示菜單,這樣xmake f --help的時候,你這個新加的開關就會被顯示出來set_option_showmenu(true)-- 在菜單中,對這個開關進行詳細描述set_option_description("Enable or disable the hello module")-- 添加鏈接庫libhello.a,這個在xmake f 會去自動檢測,如果檢測鏈接不通過,那么這個開關就會被禁用掉-- 如果ok,編譯的時候會自動加上-lhelloadd_option_links("hello")-- 添加鏈接庫檢測搜索目錄,如果路徑不對,檢測就會鏈接不通過,如果ok,在編譯的時候,會自動加上-L./libsadd_option_linkdirs("libs")-- 檢測在c代碼中: include "hello/hello.h",是否成功,ok的話才啟用hello-- 檢測c++代碼請使用:add_option_cxxincludesadd_option_cincludes("hello/hello.h")-- 添加頭文件檢測路徑,ok的話,會自動加上:-Iinc/xxx -I./inc的 編譯選項add_option_includedirs("inc/$(plat)", "inc")-- 檢測對c代碼類型wchar_t的支持,如果不存在這個類型,就檢測失敗-- 檢測會依賴add_option_cincludes中提供的頭文件,如果給定的頭文件中定義了這個類型,就能檢測通過-- 檢測c++代碼請使用:add_option_cxxtypesadd_option_ctypes("wchar_t")-- 檢測對c代碼中是否存在接口api:hello_test()-- 檢測會依賴add_option_cincludes中提供的頭文件,如果給定的頭文件中定義了這個類型,就能檢測通過-- 檢測c++代碼請使用:add_option_cxxfuncsadd_option_cfuncs("hello_test")需要注意的是,所有的檢測都是and關系,必須全部通過,才會自動啟用hello開關。
其他可以被自動添加的api
并且在檢測ok或者被手動啟用后,可以自動添加一些特殊的編譯選項、宏定義,這些接口如下:
add_option_cflags:選項開關被啟用后,自動添加c編譯選項
add_option_cxflags:選項開關被啟用后,自動添加c/c++編譯選項
add_option_cxxflags:選項開關被啟用后,自動添加c++編譯選項
add_option_ldflags:選項開關被啟用后,自動添加鏈接選項
add_option_vectorexts:選項開關被啟用后,自動添加指令擴展選項,例如:mmx, sse ...
自動生成config.h配置文件
option不僅可以在編譯的時候,自動添加編譯選項,還可以在啟用后,自動生成各種宏開關到config.h文件中,方便我們在代碼里面控制編譯邏輯
具體的使用說明,見:依賴包的添加和自動檢測機制
XMake項目詳情
XMake項目源碼
XMake項目文檔
總結
以上是生活随笔為你收集整理的xmake高级特性之自定义选项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yum 怎么安装php7 扩展
- 下一篇: java发送内嵌图片邮件