Skip to content

依赖循环有什么好办法 #3118

@zeromake

Description

@zeromake

Xmake 版本

v2.7.2+master.52dd7982a

操作系统版本和架构

Windows 10 version 19043.2130

描述问题

现在有两个库用 freetypeharfbuzz 举例(类似于这个两个库的依赖关系)。

之前两个库是直接用 xmake.lua 的 target 的方式走静态链接,直接把两个库源码互相 include,由于静态库是不需要检查依赖的库的方法所以顺便先编译哪个都行。

后来把这个两个库转为 packages 就发现了会互相依赖,而且发现如果我在最上层声明了依赖 configs 依赖里的相同库还是用自己的 configs,如果直接在 packages 里去强制依赖会直接死循环。

除了依赖循环的问题所在,还有着依赖的 packages 里的依赖的 configs 被丢弃,无法通过最上层的 add_requires("", {configs={xxx=true}}) 来覆盖。

期待的结果

看了一下 xmake 里的代码 import("package.tools.xmake").install 是一个新进程,要么用环境变量要么用文件来同步信息了。

c/c++ 是没办法搞什么一个库引入两个版本的操作,是否可以考虑想办法压平依赖树的方式,然后子依赖编译时应当继承顶层的 configs 声明(也就是用同一份)。

不过这个只能解决依赖的 configs 问题,也就是类似 sdl_ttf 库依赖 freetype 但是 freetype 有大把依赖才能开启的特性。

现在没有太好解决方案,我先把两库放一个里编译吧。

工程配置

我专门做了一个这样的 repo

xmake repo -a local https://github.com/zeromake/cycle-xrepo

在任意有 xmake.lua 的项目下执行以下命令就会看到 freetype 依赖一个 harfbuzz 方法并不存在但是如果我在 harfbuzz 里强制依赖 freetype,就会达成无限循环。

xmake require -f -y -vD --build --extra="{configs={harfbuzz=true}}" freetype

附加信息和错误日志

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions