在CMake中使用'git submodules'和'ExternalProject_Add'进行依赖项管理之间有什么关系? 我最近花了很多时间跟踪开发人员对我正在处理的C++项目的模糊和错误的构建说明。因此,我正在编写一个新的构建系统,我正在寻找最好的方法。我已经决定在CMake中使用ExternalProject\u Add命令来收集和构建项目目标之前的依赖项,但我还发现了一个建议使用git子模块的excellant,它看起来做的事情非常类似,如果不是相同的话。那么我的问题是:和之间的关系是什么

在CMake中使用'git submodules'和'ExternalProject_Add'进行依赖项管理之间有什么关系? 我最近花了很多时间跟踪开发人员对我正在处理的C++项目的模糊和错误的构建说明。因此,我正在编写一个新的构建系统,我正在寻找最好的方法。我已经决定在CMake中使用ExternalProject\u Add命令来收集和构建项目目标之前的依赖项,但我还发现了一个建议使用git子模块的excellant,它看起来做的事情非常类似,如果不是相同的话。那么我的问题是:和之间的关系是什么,c++,git,cmake,git-submodules,external-project,C++,Git,Cmake,Git Submodules,External Project,您可以在不使用git子模块的情况下使用ExternalProject\u Add: if (SPECIAL_CASE) include (ExternalProject) ExternalProject_Add ( project1 PREFIX project1 GIT_REPOSITORY "https://github.com/project.git" GIT_TAG "v1" ) endif () 项目

您可以在不使用git子模块的情况下使用
ExternalProject\u Add

if (SPECIAL_CASE)
  include (ExternalProject)
  ExternalProject_Add (
    project1
    PREFIX project1
    GIT_REPOSITORY "https://github.com/project.git"
    GIT_TAG "v1"
  )
endif ()
项目
将被克隆到
当前二进制目录
,在主项目构建之前构建并安装到本地系统中。您的主要项目将使用来自全局范围的
#include
。此解决方案仅适用于作为部分目标操作系统的依赖项提供的流行项目。您可以保证目标系统将收到所需版本的依赖项

例如,让我们看看,您的本地系统100%安装了此库。您的目标操作系统列表包括本机
Win32
(不含
MinGW
CygWin
)。所有适用于
Win32
openssl
版本都太古老了,您将无法找到
Win32
所需的
openssl
安装程序版本。因此,您可以使用
#include
if(WIN32)ExternalProject_Add
,而不使用子模块。将
openssl
子模块添加到项目中没有意义

请复习一下


如果外部
project
不流行,在流行的包管理器(如rpm、deb、ebuild等)中不可用,则最好使用子模块。

git子模块
git
实用程序提供,
ExternalProject\u Add
由CMake提供。他们怎么可能是“同一件事”?作为处理CMake项目中外部依赖关系的一种方法,您是否希望比较这些功能?我不确定那个道具。还有缺点。请求是关于堆栈溢出的主题,可以正确回答。顺便说一句,它不是
ExternalProject\u Add
而是
FetchContent
功能,类似于
git子模块提供的功能。主要取决于项目的开发人员选择
FetchContent
git子模块中的一个
“相同的东西”,我的意思是在功能方面。我不是有意暗示他们是准确的。在我看来,它们都能让第三方库不费吹灰之力就安装起来。我想知道C++的开发人员对这两个相似的特征了解什么“正常”(因为没有一个更好的单词)。也许你是对的,这是关于堆栈溢出的离题,但是我仍然发现有一个答案是非常有用的。