CMake的错误:“add_subdirectory没有给出一个二进制文件目录”

问题描述 投票:5回答:1

我想谷歌测试整合到更大的项目的子项目,我无法找到将让我满意的解决方案。

我有两个限制: - 谷歌测试的源代码已经某处项目结构(因此使用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
c++ build cmake googletest
1个回答
11
投票

该错误信息是明确的 - 你还应该指定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的不能猜测建立目录,你需要明确地提供它:

又见documentationadd_subdirectory命令。

© www.soinside.com 2019 - 2024. All rights reserved.