Как разделить мой проект на модули CMake, которые могут найти друг друга? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть проект с компонентами (например, Dependency), которые являются очень модульными,

Project
-Dependency
--Include
--Src
--CMakeLists.txt
-Main
--main.cpp
--CMakeLists.txt
CMakeLists.txt

Прямо сейчас я использую target_link_libraries() и include_directories() в моем основном CMakeLists.txt с явными относительными путями киспользуйте их.

Я хочу превратить свои зависимости в пакеты / модули / компоненты / библиотеки / некоторые вещи , которые являются автономными, поэтому я могу удалить явные пути.

Я не хочу их устанавливать.Они останутся в дереве сборки.Я хочу, например, переместить всю папку Dependency, не нарушая ничего, или скопировать папку в другой проект и заставить ее работать с помощью всего лишь вызова find_package().

-

Я пробовал

target_include_directories(Dependency PUBLIC
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>)
target_link_libraries(Dependency PUBLIC *Sub-dependencies*)

и

export(TARGETS Dependency FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/DependencyConfig.cmake")

в Dependency CMakeLists.txt, на основе:

https://rix0r.nl/blog/2015/08/13/cmake-guide/ & https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/

Но find_package() все еще не удается.

-

Как экспортировать интерфейс, чтобы CMake мог автоматически настраивать зависимости между модулями в одном дереве сборки?

1 Ответ

0 голосов
/ 06 декабря 2018

Если у вас есть target_include_directories, то зависимые цели для этой цели также могут иметь включения, в зависимости от параметра PUBLIC / PRIVATE.

То же, что и target_link_directories, который распространяет библиотеки в зависимыецели.

Вам никогда не понадобится путь к библиотекам, так как CMake должен позаботиться об этом за вас.Если это не так, это, вероятно, ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...