我想谷歌测试整合到更大的项目的子项目,我无法找到将让我满意的解决方案。
我有两个限制: - 谷歌测试的源代码已经某处项目结构(因此使用URL从git仓库下载它不是一个选项) - 谷歌测试的源代码是不是我的子项目的子目录(和永不)
所以,当我试图做这样的事情:
add_subdirectory( ${GOOGLETEST_PROJECT_LOCATION})
我收到了:
CMake Error at unit_tests/CMakeLists.txt:10 (add_subdirectory):
add_subdirectory not given a binary directory but the given source
directory "${GOOGLETEST_PROJECT_LOCATION}" is not a subdirectory of
"${UNIT_TEST_DIRECTORY}". When
specifying an out-of-tree source a binary directory must be explicitly
specified.
在另一方面,也许ExternalProject_Add可能是一个解决方案,但我不知道我应如何使用它时,我不希望在所有的下载源,并在项目中使用源从特定的位置。
项目结构看起来更或者类似这样的:
3rdparty
|--googletest
...
subproject
|--module1
|--file1.cpp
|--CMakeLists.txt
|--module2
|--file2.cpp
|--CMakeLists.txt
|--include
|--module1
|--file1.h
|--module2
|--file2.h
|--unit_test
|--module1
|--file1test.cpp
|--module2
|--file2test.cpp
|--CMakeLists.txt
|--CMakeLists.txt
CMakeLists.txt
该错误信息是明确的 - 你还应该指定build目录googletest。
# This will build googletest under build/ subdirectory in the project's build tree
add_subdirectory( ${GOOGLETEST_PROJECT_LOCATION} build)
当你给相对路径(如源目录)add_subdirectory
通话,CMake的自动使用build目录相同的相对路径。
但是,在绝对的源路径的情况下(当这个路径是不是在你的源代码树),CMake的不能猜测建立目录,你需要明确地提供它:
又见documentation为add_subdirectory
命令。