使用cmake包含来自github的外部头库

时间:2017-06-01 22:50:16

标签: c++ git cmake

GitHub存储库仅包含带有 hpp文件的CMakeList.txt个文件。

我需要在项目中包含这些头文件。我不想手动克隆它们然后链接它们。我希望每次调用cmake命令时,cmake都会克隆它们并将它们放在一些内部文件夹中。

有可能吗?如果是的话,我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

您可能需要考虑DownloadProject github项目中使用的方法,其中包含一个为GoogleTest仓库执行下载步骤的示例。它在配置阶段而不是构建阶段调用CMake的ExternalProject模块,因此外部源在配置时可用,这似乎也是你想要的。在您的情况下,您不需要使用add_subdirectory()将外部项目中的任何内容提取到主构建中的后续步骤,因此只需下载就足够了。这种方法也由this answer引用。

使用DownloadProject看起来像这样(取自作为github项目的一部分提供的示例):

include(DownloadProject.cmake)
download_project(PROJ           googletest
                 GIT_REPOSITORY https://github.com/google/googletest.git
                 GIT_TAG        master
)

然后,下载的源将存储在变量${googletest_SOURCE_DIR}中的目录下。请参阅DownloadProject源中完全一般的实现,了解其工作原理。您可以简单地将其嵌入到您自己的项目源中,并重新使用它来有效地处理下载您可能需要的任何外部依赖项。

答案 1 :(得分:1)

我设法做到了这样:

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/external_includes)
execute_process(
    COMMAND git clone "xxxxx.git" lib_name
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/external_includes)

include_directories(${CMAKE_CURRENT_BINARY_DIR}/external_includes)

这种方法在Windows上使用MSVS& Ubuntu和GCC。

当然,使用像Hunter或任何包裹管理器这样的东西是可取的,但有时需要快速简便的解决方案。