我想用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})