如何在库文件夹cmake中自动从github下载库



我想用c++创建我的第一个大项目。我需要使用一些图书馆。所以我做了这个结构

├── CMakeLists.txt
├── README.md
├── src
│   ├── CMakeLists.txt
│   ├── HelloWorld.cpp
│   ├── HelloWorld.h
│   └── main.cpp
├── tst
|   ├── CMakeLists.txt
|   ├── HelloWorld-test.cpp
|   └── main.cpp
└── lib

我想自动下载库并将其放置在lib文件夹中。在我的情况下,我想克隆谷歌测试intlib文件夹。所以我在我的主要项目CMakeLists.txt文件中尝试过:

if(UNIX)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/googletest)
execute_process(
COMMAND git clone "https://github.com/google/googletest.git" googletest
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
add_subdirectory(lib/googletest)
endif(UNIX)

但是当我构建时,我有这个错误:

CMake Error at CMakeLists.txt:17 (add_subdirectory):
add_subdirectory given source "lib/googletest" which is not an existing
directory.

这里的问题是存储库被克隆到二进制目录,但add_subdirectory查找相对于源目录的目录。

您需要在这里使用具有绝对路径的add_subdirectory,并传递一个构建目录。此外,添加引号以避免文件路径中出现空格问题。

set(REPO_PARENT "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(REPO_DIR "${REPO_PARENT}/googletest")
set(REPO_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest_build")
file(MAKE_DIRECTORY ${REPO_DIR})
file(MAKE_DIRECTORY ${REPO_BIN_DIR})
execute_process(
COMMAND git clone "https://github.com/google/googletest.git" googletest
WORKING_DIRECTORY ${REPO_PARENT})
add_subdirectory(${REPO_DIR} ${REPO_BIN_DIR})

最新更新