Я настоятельно рекомендую прочитать эту статью , в которой создается вымышленная библиотека, от структуры проекта до установки / экспорта. Насколько я понимаю, у автора точно такая же цель, как и у вас. Эта статья прояснила мне многое, когда я только начинал. Я также рекомендую структуру проекта, изложенную в.
Структура проекта:
libjsonutils
├── CMakeLists.txt
├── include
│ └── jsonutils
│ └── json_utils.h
├── src
│ ├── file_utils.h
│ └── json_utils.cpp
└── test
├── CMakeLists.txt
└── src
└── test_main.cpp
В частности, вы захотите взглянуть на Цели и свойства , где выражения генератора используются для разграничения между включаемым каталогом во время сборки и при установке:
target_include_directories(JSONUtils
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
Процесс установки и экспорт / импорт целей объясняется немного позже в Вот как вы делаете CMake . Автор хочет использовать библиотеку в других проектах cmake (например, цель под названием «пример»), просто выполнив следующее:
find_package(JSONUtils 1.0 REQUIRED)
target_link_libraries(example JSONUtils::JSONUtils)
Для того, чтобы эта работа работала, вам необходимо установить и экспортировать библиотеку. Автор рекомендует это для установки:
include(GNUInstallDirs)
install(TARGETS JSONUtils
EXPORT jsonutils-export
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
И это для экспорта:
install(EXPORT jsonutils-targets
FILE
JSONUtilsTargets.cmake
NAMESPACE
JSONUtils::
DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/JSONUtils
)
Экспорт поместит файл с именем findJsonUtils.cmake в указанное место назначения. Этот файл будет тем, что вам нужно для импорта библиотеки в другие проекты с помощью механизма find_package.
Все примеры кода в этом посте взяты из связанной статьи Пабло Ариаса.