web-dev-qa-db-ja.com

CMakeエラー:「バイナリディレクトリが指定されていないadd_subdirectory」

Google Testをより大きなプロジェクトのサブプロジェクトに統合しようとしていますが、満足のいく解決策が見つかりません。

私は2つの制約があります:-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
10
Filip

エラーメッセージは明確です。googletestにはbuild directoryも指定する必要があります。

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

relativeパスを(sourceディレクトリとして)add_subdirectory呼び出し、CMakeはbuildディレクトリに対して同じ相対パスを自動的に使用します。

しかし、絶対ソースパスの場合(およびこのパスがソースツリーにない場合)、CMakeはbuildディレクトリを推測できません、そしてあなたはそれを提供する必要がありますexplicitely

も参照してください documentation for add_subdirectoryコマンド。

12
Tsyvarev