2

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

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

所以我的问题是:

  • 我上面描述的是一种常见的做法吗?我应该这样做吗?
  • 如果不是,这个问题最普遍接受的解决方案是什么?

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

编辑: 这个问题与我的略有重叠。

4

1 回答 1

4

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

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

有关有用信息,请参阅http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html

这种方法有几个优点:

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