C++ c+中的外部库依赖关系+;项目
我目前正试图在C++中设置一个项目,使用LuabDin库。不幸的是,在我的发行版(即Arch)上,这个库不在正式的repos中,而AUR中的库已经过时,无法编译 考虑到我只需要这个库来完成这个项目,我认为我可以创建一个类似于python的VirtualEnvironment的沙盒环境,方法是构建库,然后在我的项目的两个子目录中安装(复制)include文件和生成的二进制文件,这两个子目录分别是C++ c+中的外部库依赖关系+;项目,c++,libraries,build-dependencies,C++,Libraries,Build Dependencies,我目前正试图在C++中设置一个项目,使用LuabDin库。不幸的是,在我的发行版(即Arch)上,这个库不在正式的repos中,而AUR中的库已经过时,无法编译 考虑到我只需要这个库来完成这个项目,我认为我可以创建一个类似于python的VirtualEnvironment的沙盒环境,方法是构建库,然后在我的项目的两个子目录中安装(复制)include文件和生成的二进制文件,这两个子目录分别是include和lib,我将分别添加到链接中,并在构建时包含路径。我理解为什么将库与项目一起分发是不好的
include
和lib
,我将分别添加到链接中,并在构建时包含路径。我理解为什么将库与项目一起分发是不好的:例如,同时进行安全性和bug修复。然而,分布式DLL几乎普遍在Windows上完成(如果我交叉编译,我可能会这样做),许多项目(如Linux上的游戏)倾向于打包它们的库以避免DISRTO之间的不一致。此外,如果需要修补或分叉版本的lib,我怀疑在任何官方回购协议中都找不到它
所以我的问题是:
- 我上面描述的是一种常见的做法吗?我应该这样做吗
- 如果没有,最普遍的解决方案是什么
编辑:与我的方法略有重叠。你的方法很有趣,但你没有必要设计一个工作系统,因为它已经完成了,幸运的是,你离解决方案只有一步之遥 使用CMake,可以很容易地使用模块自动构建和链接外部源代码 有关有用信息,请参阅 这种方法有几个优点:
- 您不必在存储库中包含库的源代码
- 如果您确定库的特定版本/git标记不会破坏兼容性,则可以指向库的特定版本/git标记,该标记可以与您的软件或最新版本一起使用
- 您不必编写完整的CMakeLists.txt文件来构建可能复杂的代码库
- 您最终可以将外部项目配置为生成为静态库,这样就不必分发共享库
- 如果没有必要,您甚至可以通过使用通常的find_包调用在系统上检测库的工作版本来完全绕过此问题,如果找不到,则只能将其作为外部项目进行构建
- 您不必在存储库中包含库的源代码
- 如果您确定库的特定版本/git标记不会破坏兼容性,则可以指向库的特定版本/git标记,该标记可以与您的软件或最新版本一起使用
- 您不必编写完整的CMakeLists.txt文件来构建可能复杂的代码库
- 您最终可以将外部项目配置为生成为静态库,这样就不必分发共享库
- 如果没有必要,您甚至可以通过使用通常的find_包调用在系统上检测库的工作版本来完全绕过此问题,如果找不到,则只能将其作为外部项目进行构建