Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的外部库依赖关系+;项目_C++_Libraries_Build Dependencies - Fatal编程技术网

C++ c+中的外部库依赖关系+;项目

C++ c+中的外部库依赖关系+;项目,c++,libraries,build-dependencies,C++,Libraries,Build Dependencies,我目前正试图在C++中设置一个项目,使用LuabDin库。不幸的是,在我的发行版(即Arch)上,这个库不在正式的repos中,而AUR中的库已经过时,无法编译 考虑到我只需要这个库来完成这个项目,我认为我可以创建一个类似于python的VirtualEnvironment的沙盒环境,方法是构建库,然后在我的项目的两个子目录中安装(复制)include文件和生成的二进制文件,这两个子目录分别是include和lib,我将分别添加到链接中,并在构建时包含路径。我理解为什么将库与项目一起分发是不好的

我目前正试图在C++中设置一个项目,使用LuabDin库。不幸的是,在我的发行版(即Arch)上,这个库不在正式的repos中,而AUR中的库已经过时,无法编译

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

所以我的问题是:

  • 我上面描述的是一种常见的做法吗?我应该这样做吗
  • 如果没有,最普遍的解决方案是什么
注意:如果重要的话,我使用Cmake实现构建自动化


编辑:与我的方法略有重叠。

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

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

有关有用信息,请参阅

这种方法有几个优点:

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

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

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

有关有用信息,请参阅

这种方法有几个优点:

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

+1 cmake永远不会停止使用。然而,即使使用ExternalProject模块,我仍然觉得所有的库安装都在污染我的系统。如果我将安装路径(库和头)设置在项目的工作目录中,可以吗?(至少对于调试版本,版本一可能会链接到系统库(如果可用)或者包含它们)可以,这就是它应该如何工作的。安装目录应位于CMAKE_BINARY_目录下。整个过程假设没有系统范围的修改。+1 cmake永远不会停止使用。然而,即使使用ExternalProject模块,我仍然觉得所有的库安装都在污染我的系统。如果我将安装路径(库和头)设置在项目的工作目录中,可以吗?(至少对于调试版本,版本一可能会链接到系统库(如果可用)或者包含它们)可以,这就是它应该如何工作的。安装目录应位于CMAKE_BINARY_目录下。整个过程假设没有系统范围的修改。