Путь включения может быть установлен как распространяемый параметр в зависимости:
target_link_libraries
Укажите библиотеки или флаги, которые будут использоваться при связывании данной цели и / или его иждивенцы. Будут распространяться требования к использованию из целевых объектов связанных библиотек. Требования к использованию зависимостей цели влияют на компиляцию ее собственных источников.
https://cmake.org/cmake/help/latest/command/target_link_libraries.html
Это означает, что target_link_libraries
настроит цель. Он установит target_compile_features
, target_compile_options
, target_compile_directories
, если они установлены как INTERFACE
или PUBLIC
в зависимости.
Например,
add_library(Lib ${SRCS_LIB})
target_include_directories(Lib INTERFACE ${DIRECTORY})
add_exectuable(Exe ${SRCS_EXE})
target_link_libraries(Exe PRIVATE Lib)
В этом Пример Exe
унаследует подключаемые каталоги от Lib
. Вам не нужно устанавливать их явно.
Так же работает Conan , например, Начало работы
cmake_minimum_required(VERSION 2.8.12)
project(MD5Encrypter)
add_definitions("-std=c++11")
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(md5 md5.cpp)
target_link_libraries(md5 ${CONAN_LIBS})
и как это описано в Эффективный современный CMake
Используйте экспортированные целевые объекты внешних пакетов.
Не возвращайтесь к старому стилю использования CMake переменные, определенные внешними пакетами. Вместо этого используйте экспортированные цели через target_link_libraries
.
Лучше всего не использовать target_include_directories
для ваших зависимостей.