web-dev-qa-db-fra.com

Erreur CMake: "add_subdirectory n'a pas reçu de répertoire binaire"

J'essaie d'intégrer Google Test dans le sous-projet d'un projet plus important et je ne trouve pas la solution qui me satisferait.

J'ai deux contraintes: - le code source de Google Test est déjà quelque part dans la structure du projet (donc utiliser l'URL pour le télécharger depuis le dépôt git n'est pas une option) - le code source de Google Test n'est pas un sous-répertoire de mon sous-projet (et ne le sera jamais)

Donc, quand j'ai essayé de faire quelque chose comme ça:

add_subdirectory( ${GOOGLETEST_PROJECT_LOCATION})

J'ai reçu:

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.

D'un autre côté, ExternalProject_Add pourrait être une solution, mais je ne sais pas comment l'utiliser lorsque je ne veux pas du tout télécharger les sources et utiliser des sources à partir d'un emplacement spécifique dans le projet.

La structure du projet ressemble ou ressemble à ceci:

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
10
Filip

Le message d'erreur est clair - vous devez également spécifier le répertoire de construction pour googletest.

# This will build googletest under build/ subdirectory in the project's build tree
add_subdirectory( ${GOOGLETEST_PROJECT_LOCATION} build)

Lorsque vous donnez relatif chemin (comme un répertoire source) à add_subdirectory appel, CMake utilise automatiquement le même chemin relatif pour le répertoire build.

Mais en cas de source absolue chemin (et lorsque ce chemin n'est pas dans votre arborescence source), CMake ne peut pas deviner le répertoire build, et vous devez fournir il explicitement :

Voir aussi documentation pour add_subdirectory commande.

12
Tsyvarev