xmake icon indicating copy to clipboard operation
xmake copied to clipboard

Sometimes the package environments are not bound to on_buildcmd_files

Open xq114 opened this issue 3 years ago • 8 comments

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

xq114 avatar Aug 28 '22 14:08 xq114

你这个例子不完整,没有 add_packages 绑定任何包,shadercRelease 也不在 bdfx 包里。。无法测试

waruqi avatar Aug 29 '22 02:08 waruqi

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的时候才会出问题

xq114 avatar Aug 30 '22 13:08 xq114

shadercRelease 在哪?我没看到 bgfx 里面有这个么,这个包都没设置 bin path

waruqi avatar Aug 30 '22 13:08 waruqi

shadercRelease 在哪?我没看到 bgfx 里面有这个么,这个包都没设置 bin path

https://github.com/xmake-io/xmake-repo/blob/master/packages/b/bgfx/xmake.lua#L110

xq114 avatar Aug 30 '22 14:08 xq114

这块我大概知道问题原因,但改起来要对 job 绑定 env 做点局部重构,目前隔离的不彻底,会有 env 干扰,另外目前 env 绑定还不支持 public dep 导出。

你先直接对 .ext 所在的 target 直接绑定 package。。

waruqi avatar Aug 30 '22 15:08 waruqi

试下这个 patch ,对 dep public package 也整进来了,应该能用了。。不过 envs 隔离问题 不太好搞,可能会影响性能 后面再想办法,先就这样吧。

https://github.com/xmake-io/xmake/pull/2751

waruqi avatar Aug 31 '22 14:08 waruqi

这个地方只处理一层够吗?要是有链式依赖的话还得递归处理吧

xq114 avatar Sep 01 '22 07:09 xq114

orderdeps 原本就是所有 deps 展开后的了

waruqi avatar Sep 01 '22 08:09 waruqi

这里没问题的话 先这样吧

waruqi avatar Sep 23 '22 15:09 waruqi