Cia*_*lsh 5 c++ git cmake git-submodules external-project
最近,我花了很多时间关注一位早已去世的开发人员为我正在开发的 C++ 项目提供的含糊且不正确的构建说明。因此,我正在编写一个新的构建系统,并且正在寻找最好的方法。我已经决定ExternalProject_Add
在项目目标之前使用 CMake 中的命令来收集和构建依赖项,但我还发现了一篇建议使用 git 子模块的优秀文章,它看起来做了非常相似的事情,即使不是相同的事情。所以我的问题: git 子模块和ExternalProject_Add之间有什么关系?
您可以ExternalProject_Add
在没有 git 子模块的情况下使用:
if (SPECIAL_CASE)
include (ExternalProject)
ExternalProject_Add (
project1
PREFIX project1
GIT_REPOSITORY "https://github.com/project.git"
GIT_TAG "v1"
)
endif ()
Run Code Online (Sandbox Code Playgroud)
project
在主项目构建之前将被克隆到CURRENT_BINARY_DIR
、构建并安装到本地系统中。您的主要项目将从全球范围内使用#include <project/header.h>
。该解决方案仅适用于流行项目,这些项目可作为部分目标操作系统的依赖项。您可以保证您的目标系统将收到所需版本的依赖项。
例如,让我们看看openssl
,您的本地系统 100% 安装了这个库。您的目标操作系统列表包括本机Win32
(不带MinGW
或CygWin
)。openssl
所有可用的for版本Win32
都太旧了,您将无法找到所需版本的openssl
安装程序Win32
。所以你可以#include <openssl/ssl.h>
与if (WIN32) ExternalProject_Add
没有子模块一起使用。将子模块添加到您的项目中是没有意义的openssl
。
请查看以下示例。
如果外部project
不流行,在流行的包管理器(如 rpm、deb、ebuilds 等)中不可用,那么最好使用子模块。