CMake Ошибка: «add_subdirectory не задан двоичный каталог» - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь интегрировать Google Test в подпроект более крупного проекта, и я не могу найти решение, которое бы меня устраивало.

У меня есть два ограничения: - исходный код Google Test уже где-тов структуре проекта (таким образом, использование URL для загрузки его из репозитория git не вариант) - исходный код Google Test не является подкаталогом моего подпроекта (и никогда не будет)

Поэтому, когда я пытался сделатьчто-то вроде этого:

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

1 Ответ

0 голосов
/ 18 мая 2018

Сообщение об ошибке ясно - вы должны также указать каталог сборки для 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 не может угадать каталог build , и вам необходимо предоставить его явно :

См. также документация для add_subdirectory команды.

...