-
-
Notifications
You must be signed in to change notification settings - Fork 784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
期望platforms和rules可以從指定目錄尋找 #260
Comments
add_plugindirs 仅用于加载task,不过 task/rules 目前是支持 直接在工程xmake.lua 里面直接定义,所以通过 includes 接口在 xmake.lua里面包含进来就行了。。 而includes和add_plugindirs区别就是,includes指定单个或者多个插件xmake.lua,而add_plugindirs是指定整个插件目录,里面可以自动加载所有包含的插件。。 platforms 目前可以在 工程 .xmake/plaforms 以及 ~/.xmake/platforms下的也能被找到,不过是否也需要在工程xmake.lua中 直接支持,我还得考虑下。。 |
如果可以明確指定platforms目錄,將使得專案管理擁有非常大的便利性。這如同cmake可以明確指定要使用的toolchains一樣。 如果放在家目錄中 基於一些公司的合約協議 (例如sony ps4、微軟 xbox1、任天堂 switch),常常會有需要保密的輔助工具庫,它們需要被編譯,但在代碼發布的時候必須被隔離,且這些庫一旦數量多了,若個自都得維護自己的platform真的會顯得十分麻煩。 |
ok, 这个我可以想办法支持下。。 |
近期打算先发个版本,当前版本主要还是以改进包管理为主,新特性挪到下个版本实现。。 |
关于平台自定义,如果不是特别复杂的需求,我更推荐用户直接在xmake.lua通过is_plat("xxx")和set_config来配置,set_config是可以设置一切 if is_plat("xxx") then
set_config("cc", "xxx-xxx-gcc")
set_config("sdk", "/xxx/xxx")
add_defines("IS_PLAT_XXX")
end 然后运行配置: 或者我们也可以通过自定义选项来扩展平台: option("myplat")
set_default("xxx")
set_showmenu(true)
set_description("xxxxx")
if is_config("myplat", "xxx") then
-- ..
end 然后运行配置: 如果必须要在内置的平台上进行扩展,设置自定义平台文件,当然也是可以的,这块等我这边手头上其他特性的一些细节工作处理完后,会尝试开始支持下,可能还需要点时间,请耐性等待。。 |
關於上面的這兩種設置方法,我遇到了一些執行順序問題,例如說在platform/windows/check.lua第42行,這個位置如果想要取得 想請問有沒有方法,在xmake命令執行後腳本的大多數位置都能取得 set_config 設置的資料? 因為config.get() 在這種狀況下無法保證必定取得 XXX 的值。 |
关于set_config在 xmake.lua中的设置,目前实现上确实会存在这个问题 这个我之后改进下实现 |
set_config 我改进过了,你再更新下 https://github.com/tboox/xmake/releases/download/v2.2.3/xmake-v2.2.4-dev.exe 包试试,或者更新下dev分支代码。 关于set_platformdirs的设置,我后两天在尝试支持下。 |
更新了最新的 dev 分支,然後在使用 rule 的過程中,發現 -- FILE: common.lua
rule("common")
on_load(function (target)
import("core.project.config")
if is_plat("windows") then
-- win10 sdk version
config.set("vs_sdkver", "10.0.10586.0")
end
end)
-- FILE: xmake.lua
includes("common.lua")
target("GTestApp")
add_rules("common")
...
... 順便回報一下試驗結果,在xmake描述域底下,set_config 設置的值可以讓 vs project 產生過程中正確讀取,目前有問題的是設置在 rule 作用域的時候。 |
这个问题迁移到:#279 |
includes("../../../extra/rules/common.lua")
includes("../../extra/rules/common.lua")
includes("../../../../../extra/rules/common.lua") 因此試驗了一個看似方便的方法,但暫時行不通,想請問運行細節。 -- 同深度的目錄,執行xmake前先用相同的 bat 腳本設置環境變量,然後傳入 --extra_dir=XXXXX
set XXXXX=../../extra
xmake f --extra_dir=%XXXXX% .........
-- xmake.lua 在開始的地方用 option 來設定內置變量。
option("extra_dir")
set_default("$(programdir)/../extra")
set_showmenu(true)
option_end()
-- 維護的時候一律都從 $(extra_dir) 開始寫路徑
includes("$(extra_dir)/rules/common.lua")
-- 甚至直接使用外部環境變量
includes("$(env XXXXX)/rules/common.lua") 貌似在 function interpreter:api_builtin_includes(...) 這裡是不能直接用 vformat 轉譯。
set_warnings("all", "error")
set_languages("c99", "cxx11") |
这个跟当前issues无关,尽量新开个issues来维护,混在一起不好跟踪维护,我不太好持续跟进,经常会忘记掉。 |
我想了下关于add_platformdirs的问题,目前暂时不打算提供这个接口,主要考虑到以下原因:
-- 相当于set_platformdirs,包含platforms目录下所有平台设置,例如:freebsd.lua, ...
includes("platforms/*.lua") 然后在平台目录下指定平台,例如freebsd.lua设置中,进行针对性的设置: if is_plat("freebsd") then
add_cflags("xxx")
add_linkdirs("ssss")
add_syslinks("ddd")
set_config("cc", "arm-xxx-gcc")
end 如果要支持命令菜单中的平台参数提示,以及相关工具链环境的检测,可以通过定义option来实现: option("freebsd")
set_showmenu(true)
set_description("The fressbsd platform")
-- 这个freebsd平台选项内置的一些flags和其他设置
add_links("pthread")
add_defines("XXX")
add_includedirs("/tmp/")
-- 如果要检测或者设置编译工具,可以在option检测前,做一些自己的逻辑处理
before_check(function (option)
import("core.project.config")
config.set("cc", "gcc")
end)
-- 关联freebsd选项到test target,如果此平台选项被启用,相关的设置defines, flags都会应用到 test target
target("test")
add_options("freebsd") 这个时候我们就可以在命令行上切换此平台了: $ xmake f --freebsd=y 如果我们想更加通用点,可以在一个选项里面区分不同平台,进行相关设置: option("myplat")
set_showmenu(true)
set_description("My platform")
before_check(function (option)
import("core.project.config")
config.set("cc", "gcc")
if option:value() == "freebsd" then
option:add("syslinks", "pthread")
option:add("defines", "XXX")
option:add("includedirs", "/tmp")
end
end)
target("test")
add_options("myplat") 然后: $ xmake f --myplat=freebsd
鉴于以上原因,我不打算提供add_platformdirs了,即使后期改进完,也只需要通过includes加载指定平台目录下的设置就行了。 |
像platform/plugin (task)这些都是描述域的定义,都是可以在xmake.lua中进行includes来加载的,所以像add_plugindirs我觉得必要性也不是很大,后面我也会打算逐步弃用,尽量复用通用的includes接口。 只有add_moduledirs是必须的,因为模块脚本不能再xmake.lua中的描述域中通过includes加载,只能在脚本域中通过import来加载。 |
对于platform的改进,还需要思考下,可能得花点时间,我开了个新issues用来跟进,#280 |
我已经支持通过 add_platformdirs("platforms") platform我已经重构过了,提供更加开放通用的自定义扩展接口,目前还没写相关文档,可以直接参考源码目录下,内置platform的定义,进行参考,相关platform改进api支持,也可以看下:#280 需要注意的是,这次对platform的改动比较大,建议更新后,进行全平台测试验证下已有平台的构建是否受到影响(我这边初步测试没啥问题)。 |
感謝更新,在數個平台測試下,當前已經存在的 xmake 腳本都可以正常運作。
測試用的移植專案有:
私有平台的API測試,我回頭多做些完整測試再給回饋 |
收到,多谢 |
此处先close了,如果后续测试有问题,可新开issues或者reopen it |
類似於 add_moduledirs 的功能,讓多個專案可以共用同樣的模組。
客製特定的platforms和rules,如果可以明確指定專案外的資料夾,將會讓大型專案的切分和管理更方便。
另外,目前有 add_plugindirs 貌似應該適合使用在 task ,那麼 platforms 和 rules 也可以放在plugin嗎?
The text was updated successfully, but these errors were encountered: