Как подключить директорию вне каталога cmake?
Потребовалось вынести из проекта поддиреткорию, которая указывалась с помощью add_subdirectory, теперь cmake выдает ошибку
CMake Error at unit_tests/CMakeLists.txt:2 (add_subdirectory):
add_subdirectory not given a binary directory but the given source
directory "/home/anton/dev/techno_park/cpp/task2/googletest" is not a
subdirectory of
"/home/anton/dev/techno_park/cpp/task2/filemetrics/unit_tests". When
specifying an out-of-tree source a binary directory must be explicitly
specified.
Как подключить директрию, не являющуюся подкаталогом ? cmake файл
project(unit_tests)
add_subdirectory(${CMAKE_SOURCE_DIR}/../googletest)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
add_executable(Google_Tests_run str_tests.cpp str_map_tests.cpp vec_tests.cpp
tf_idf_priority_queue_tests.cpp file_metric_tests.cpp)
target_link_libraries(Google_Tests_run gtest gtest_main)
Ответы (2 шт):
В функции add_subdirectory(source_dir binary_dir) можно указать абсолютный путь до директории или относительно директории исходников ${CMAKE_SOURCE_DIR}/../sub_dir. При указании абсолютного пути поддиректории также нужно указывать абсолютный путь для директории сборки.
Но делая такие включения Вы теряете возможность перемешать проект без необходимости делать исправления в конфигурационном файле
Каталог для бинарных файлов указывается вторым аргументам. Однако CMake не рассчитан на работу с горизонтально организованными проектами. Так что скорее всего придется указывать бинарную директорию, отличную от той, в которой подключаемый проект собирался бы отдельно. Хотя это из-за этого файлы будут собираться повторно, однако такой вариант позволит избежать ошибок из-за несогласованности сборки в одной папке но с разным раcположением корневого CMakeLists.txt
Как вариант, можно добавить еще один cmake верхнего уровня и два этих включать в него. Однако работа с древовидно организованными проектами в CMake реализована тоже не ахти.