xmake
xmake copied to clipboard
vsxmake生成的工程没有依赖关系
Xmake 版本
2.6.8
操作系统版本和架构
Windows 11
描述问题
之前讨论过的依赖关系和编译顺序在命令行直接执行xmake的时候运行得很好,但是通过vsxmake生成得工程没有依赖关系,导致生成顺序不能保证
期待的结果
vsxmake生成的工程需要有依赖关系。应该是sln文件的Project字段里面需要包含ProjectSection(ProjectDependencies)
工程配置
No response
附加信息和错误日志
No response
可以来个 pr 过来
但是通过vsxmake生成得工程没有依赖关系,导致生成顺序不能保证
里面也是调用 xmake 去执行构建,没有本质区别。内部会保证依赖顺序,如果顺序不对,导致编译错误,那就是 bug
你可以提供相关logs信息,我会分析下。
刚想了下,这里确实没必要去改 generator
vs .里面,尽管看上去多个target 同时构建了,但是有进程级别 project lock 保护,最终还是会保证所有target 按照deps顺序构建完成的,这个问题 很早就处理过了。。
主要是我有些源文件是通过函数查找加入的:
local apps = { "app1", "app2" }
for _, app in ipairs(apps) do
target(app)
add_files(app .. "/**.cpp")
for __, f in ipairs(os.files(app .. "/table/**.cpp")) do
local name = path.basename(f)
local table2 = path.join(app, "..", "table", name .. "2.cpp")
if os.isfile(table2) then
add_files(table2)
end
end
......
end
现有的vsxmake编译会找不到table2的文件,导致最终链接失败。我修改之后就可以成功编译。table和table2都是辅助工具生成的代码
table和table2都是辅助工具生成的代码
什么时间段生成的,怎么个生成法?
看配置,你这是描述域自动扫的files,按理还没执行任何 xmake config/build前,在 load targets 阶段,就全部加载进来嘞,在 vsxmake 里面调用 xmake 不会出问题才对。。
具体还是要看你的生成时机和过程是怎么样的,才能确认哪里的问题,最好有个可复现的 example 工程,感觉这个跟 vsxmake 关系不大。。
有时间我试试能不能创建一个示例工程,原工程太庞大,简单创建了一个没有这个问题
那个 project lock 当初就是为了 vsxmake 加的,记不记得 @waruqi
https://github.com/xmake-io/xmake/issues/257#issuecomment-513666664
之前讨论在这里
这里暂时先关了,回头有其他改进点可以再提