gpt4 book ai didi

c++ - C++ 项目中的外部库依赖项

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:05 28 4
gpt4 key购买 nike

我目前正尝试在 C++ 中设置一个使用 luabind 库的项目。不幸的是,在我的发行版 Arch 上,这个库不在官方仓库中,而 AUR 中的库已经过时,无法编译。

考虑到我只需要这个项目的库,我认为我可以通过构建库然后在我的项目的 2 个子目录中安装(复制)包含文件和生成的二进制文件来创建类似于 python 的 virtualenv 的沙盒环境includelib,我将分别在构建时添加到链接和包含路径。我理解为什么将库与您的项目一起分发是不好的:例如,同时进行安全性和错误修复。然而,分发 DLL 几乎普遍在 Windows 上完成(如果我交叉编译,我可能会这样做)并且许多项目(例如 Linux 上的游戏)倾向于打包它们的库以避免 disrtos 之间的不一致。此外,如果需要补丁或 fork 版本的库,我怀疑我是否会在任何官方 repo 中找到它。

所以我的问题是:

  • 我上面描述的是常见的做法吗?我应该这样做吗?
  • 如果没有,这个问题最普遍认同的解决方案是什么?

注意:如果重要的话,我使用 Cmake 进行构建自动化

编辑: This question与我的略有重叠。

最佳答案

你的方法很有趣,但你没有必要设计一个工作系统,因为它已经完成了,幸运的是,你离解决方案只有一步之遥!

使用 CMake,很容易自动构建和链接外部源代码,使用 ExternalProject模块。

参见 http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html获取有用的信息。

这种方法有几个优点:

  • 您不必在存储库中包含库的源代码
  • 您可以指出您知道与您的软件一起使用的库的特定版本/git 标签,或者如果您确定它不会破坏兼容性,则指向最新版本
  • 您不必编写完整的 CMakeLists.txt 文件来构建可能很复杂的代码库
  • 您最终可以将外部项目配置为构建为静态库,这样您就不必分发共享库
  • 如果没有必要,你甚至可以完全绕过这个,方法是尝试使用通常的 find_package 调用检测系统上库的工作版本,如果没有找到,只回退到将其构建为外部项目

关于c++ - C++ 项目中的外部库依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19771691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com