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

时间:2013-11-04 15:56:29

标签: c++ libraries build-dependencies

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

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

所以我的问题是:

  • 我上面描述的是一种常见做法吗?我应该这样做吗?
  • 如果没有,对这个问题最常见的解决办法是什么?

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

编辑: This question与我的重叠。

1 个答案:

答案 0 :(得分:3)

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

使用CMake,使用ExternalProject模块可以轻松自动构建和链接外部源代码。

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

这种方法有几个优点:

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