【发布时间】:2010-05-17 03:34:12
【问题描述】:
我最近开始使用跨平台构建系统(按需生成 make 文件、Visual Studio 解决方案/项目等)建立自己的库和项目,但我遇到了一个可能已经解决的问题。
我遇到的问题是:当一个应用程序的依赖项也有依赖项时,被链接的应用程序必须链接该依赖项及其所有子依赖项。这以递归方式进行,例如
(为了论证,假设我们只处理静态库。)
- TopLevelApp.exe
- 依赖关系_A
- dependency_A-1
- dependency_A-2
- 依赖_B
- dependency_B-1
- dependency_B-2
- 依赖关系_A
所以在这个例子中,TopLevelApp 将需要链接dependency_A、dependency_A-1、dependency_A-2 等,B 也是如此。我认为在目标应用程序中手动记住所有这些的责任是非常次优的。还有一个问题是确保所有目标都使用相同版本的依赖项(假设某些目标依赖于相同的东西,例如 boost)。
现在需要链接所有库,并且无法绕过它。我正在寻找的是一个为你管理这个的构建系统。因此,您所要做的就是指定您依赖某些东西,并且该库的适当依赖项将被自动拉入。
我一直在查看的构建系统是 premake premake4,它不能处理这个问题(据我所知)。有谁知道可以处理此问题的构建系统?如果没有,那为什么不呢?
【问题讨论】:
-
看来 cmake 可以完成所需的工作,有人知道其他人吗? Scons,汽车制造商?
-
你可以通过 pkg-config 使用 automake 来实现它。
-
谢谢迈克尔,我想这就是我需要的所有信息。看起来我将把我的构建工作转移到 cmake :)
-
在对 cmake 失望之后,我回到了 premake,我发现有一个补丁可以支持这个特定的功能!我已经检查了源代码并验证了它可以正常工作,而且它实际上很直观且易于使用:) 我将尽我所能帮助确保此功能在下一个官方版本的 premake 中(我强烈推荐)。
-
自从我问这个问题以来已经有一段时间了,事实证明我在之前的评论中提到的 premake 中的功能不能按预期工作。具体来说,它没有正确排序要链接的东西……还有其他问题,但我忘记了细节,我建议避免使用此功能。作为最后的手段,我实际上已经编写了自己的构建系统。
标签: c++ dependencies build-system premake