Учитывая, что ваш комментарий к ответу arrowdodger о страхе установки чего-либо может испортить вашу систему, я решил дать концептуальный комментарий в форме ответа из-за его длины.
Цепной проект cmake работает через find_package,который ищет файлы * Config.cmake и * -config.cmake.
CMakeLists.txt проекта A:
#CMakeLists.txt
project(A)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/AConfig.cmake share/A/cmake
)
#AConfig.cmake
message("Yepp, you've found me.")
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/tmp/test-install ..
$ make install
CMakeLists.txt проекта B:
project(B)
find_package(A)
Тогда
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/tmp/test-install ..
$ make install
приводит к
...
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
Yepp, you've found me.
B найденному A, потому что он установил AConfig.cmake в место, где cmake найдет его 'share / A / cmake' И получилто же значение для CMAKE_INSTALL_PREFIX.
Теперь это так.Давайте подумаем о том, что вы можете сделать в AConfig.cmake: AFAIK все, что вы хотите.Но наиболее распространенная задача - получить информацию о целях A с помощью include (), выполнить некоторые дополнительные вызовы find_package для сторонних пакетов (HINT HINT) и создать переменные
A_LIBRARIES
A_INCLUDE_DIRS
Что вы хотите включитьэто файл, который был создан
install(EXPORT A-targets
DESTINATION share/A/cmake
)
в CMakeLists.txt A, где A-target относится к глобальной переменной cmake, которая накапливала всю информацию о цели при использовании в
install(TARGETS ...
EXPORT A-targets
...
)
statments,При make install создается файл
/tmp/test-install/share/A/cmake/A-targets.cmake
, который затем располагается вместе с AConfig.cmake в том же каталоге.Пожалуйста, еще раз посмотрите на вики-страницу о том, как использовать этот файл в AConfig.cmake.
Относительно команды export (): Это удобно, если ваши проекты получили ОГРОМНОЕ, и это занимает значительное времяустановить их.Чтобы ускорить процесс, вы хотите напрямую использовать то, что находится в директории build /.Это оптимизация и также объяснено в вики.Это все еще работает через find_package (), см.
Но я настоятельно рекомендую вам сейчас пойти по обычному маршруту make install.