-
-
Notifications
You must be signed in to change notification settings - Fork 884
Description
Xmake 版本
v2.7.2+master.52dd7982a
操作系统版本和架构
Windows 10 version 19043.2130
描述问题
现在有两个库用 freetype 和 harfbuzz 举例(类似于这个两个库的依赖关系)。
之前两个库是直接用 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