通常の状況では、プロジェクトの各サブプロジェクトは一般的なプロジェクトのルート ディレクトリにありますが、外部フォルダーを使用する必要がある場合があります。たとえば、ディレクトリcxx/utility/example
内でCMakeLists.txt
上位ディレクトリを参照したい場合cxx/utility
、CMakeLists.txt
通常は
、cxx/utility/example
ディレクトリ内でCMakeLists.txt
それを直接使用します。
add_subdirectory(${
CMAKE_CURRENT_SOURCE_DIR}/..)
実行するとcmake -B build
、エラーが報告されます。
CMake Error at CMakeLists.txt:14 (add_subdirectory):
add_subdirectory not given a binary directory but the given source
directory "D:/workspace/sdk/base/cxx/utility" is not a subdirectory of
"D:/workspace/sdk/base/cxx/utility/example". When specifying an
out-of-tree source a binary directory must be explicitly specified.
エラーの理由: 追加するフォルダーが現在のプロジェクトのサブディレクトリではないためです。最後の文は、外部フォルダーを指定するには、それを明示的に指定する必要があることを示しています。しかし、それを明示的に指定するにはどうすればよいでしょうか? 公式ドキュメントを確認してください。出力フォルダー内の場所を指定するために使用される別のパラメーターがあること
がわかりました。指定されていない場合は、その値が使用されます。外部フォルダーを追加する場合は、これを指定する必要があります。内部の変更は次のとおりです。add_subdirectory
binary_dir
source_dir
source_dir
binary_dir
cxx/utility/example
CMakeLists.txt
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/.. 3rdparty/base/utility)
実行後、cmake -B build
出力ディレクトリに追加のサブディレクトリが表示されます。これは3rdparty/base/utility
2 番目のパラメータbinary_dir
で指定されます。