在CMake中使用'git submodules'和'ExternalProject_Add'进行依赖项管理之间有什么关系? 我最近花了很多时间跟踪开发人员对我正在处理的C++项目的模糊和错误的构建说明。因此,我正在编写一个新的构建系统,我正在寻找最好的方法。我已经决定在CMake中使用ExternalProject\u Add命令来收集和构建项目目标之前的依赖项,但我还发现了一个建议使用git子模块的excellant,它看起来做的事情非常类似,如果不是相同的话。那么我的问题是:和之间的关系是什么
您可以在不使用git子模块的情况下使用在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 () 项目
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++的开发人员对这两个相似的特征了解什么“正常”(因为没有一个更好的单词)。也许你是对的,这是关于堆栈溢出的离题,但是我仍然发现有一个答案是非常有用的。