xmake icon indicating copy to clipboard operation
xmake copied to clipboard

vsxmake生成的工程没有依赖关系

Open Domain opened this issue 2 years ago • 7 comments

Xmake 版本

2.6.8

操作系统版本和架构

Windows 11

描述问题

之前讨论过的依赖关系和编译顺序在命令行直接执行xmake的时候运行得很好,但是通过vsxmake生成得工程没有依赖关系,导致生成顺序不能保证

期待的结果

vsxmake生成的工程需要有依赖关系。应该是sln文件的Project字段里面需要包含ProjectSection(ProjectDependencies)

工程配置

No response

附加信息和错误日志

No response

Domain avatar Jun 28 '22 02:06 Domain

可以来个 pr 过来

waruqi avatar Jun 28 '22 02:06 waruqi

但是通过vsxmake生成得工程没有依赖关系,导致生成顺序不能保证

里面也是调用 xmake 去执行构建,没有本质区别。内部会保证依赖顺序,如果顺序不对,导致编译错误,那就是 bug

你可以提供相关logs信息,我会分析下。

刚想了下,这里确实没必要去改 generator

vs .里面,尽管看上去多个target 同时构建了,但是有进程级别 project lock 保护,最终还是会保证所有target 按照deps顺序构建完成的,这个问题 很早就处理过了。。

waruqi avatar Jun 30 '22 16:06 waruqi

主要是我有些源文件是通过函数查找加入的:

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都是辅助工具生成的代码

Domain avatar Jul 01 '22 02:07 Domain

table和table2都是辅助工具生成的代码

什么时间段生成的,怎么个生成法?

看配置,你这是描述域自动扫的files,按理还没执行任何 xmake config/build前,在 load targets 阶段,就全部加载进来嘞,在 vsxmake 里面调用 xmake 不会出问题才对。。

具体还是要看你的生成时机和过程是怎么样的,才能确认哪里的问题,最好有个可复现的 example 工程,感觉这个跟 vsxmake 关系不大。。

waruqi avatar Jul 01 '22 02:07 waruqi

有时间我试试能不能创建一个示例工程,原工程太庞大,简单创建了一个没有这个问题

Domain avatar Jul 04 '22 02:07 Domain

那个 project lock 当初就是为了 vsxmake 加的,记不记得 @waruqi

OpportunityLiu avatar Jul 13 '22 10:07 OpportunityLiu

https://github.com/xmake-io/xmake/issues/257#issuecomment-513666664

之前讨论在这里

OpportunityLiu avatar Jul 13 '22 10:07 OpportunityLiu

这里暂时先关了,回头有其他改进点可以再提

waruqi avatar Aug 16 '22 01:08 waruqi