xmake
xmake copied to clipboard
Sometimes the package environments are not bound to on_buildcmd_files
Xmake 版本
2.7.1
操作系统版本和架构
Windows 10
描述问题
在on_buildcmd_files中调用find_program,如果项目中有phony target,则有时会找不到add_requires引入的package,有时能找到
期待的结果
希望可以确保on_buildcmd_files环境绑定依赖包环境
工程配置
add_requires("bgfx")
rule("test")
set_extensions(".ext")
on_buildcmd_files(function (target, batchcmds, sourcefile, opt)
import("lib.detect.find_program")
assert(find_program("shadercRelease", {paths = "$(env PATH)"}))
end)
add_rules("test")
target("phony")
set_kind("phony")
target("main")
add_files("asset.ext")
add_files("main.cpp")
附加信息和错误日志
No response
你这个例子不完整,没有 add_packages 绑定任何包,shadercRelease 也不在 bdfx 包里。。无法测试
add_requires("bgfx")
rule("test")
set_extensions(".ext")
on_buildcmd_files(function (target, batchcmds, sourcefile, opt)
import("lib.detect.find_program")
print(os.getenv("PATH"))
assert(find_program("shadercRelease", {paths = "$(env PATH)"}))
end)
rule_end()
add_rules("test")
target("phony")
set_kind("phony")
target("lib")
add_packages("bgfx", {public = true})
add_files("lib.cpp")
target("main")
add_deps("lib")
add_files("asset.ext")
add_files("test.cpp")
我改了一下,现在可以复现了,bgfx通过public package引入,同时项目中存在phony target的时候才会出问题
shadercRelease 在哪?我没看到 bgfx 里面有这个么,这个包都没设置 bin path
shadercRelease 在哪?我没看到 bgfx 里面有这个么,这个包都没设置 bin path
https://github.com/xmake-io/xmake-repo/blob/master/packages/b/bgfx/xmake.lua#L110
这块我大概知道问题原因,但改起来要对 job 绑定 env 做点局部重构,目前隔离的不彻底,会有 env 干扰,另外目前 env 绑定还不支持 public dep 导出。
你先直接对 .ext 所在的 target 直接绑定 package。。
试下这个 patch ,对 dep public package 也整进来了,应该能用了。。不过 envs 隔离问题 不太好搞,可能会影响性能 后面再想办法,先就这样吧。
https://github.com/xmake-io/xmake/pull/2751
这个地方只处理一层够吗?要是有链式依赖的话还得递归处理吧
orderdeps 原本就是所有 deps 展开后的了
这里没问题的话 先这样吧