У меня очень простая библиотека с заголовочным файлом и исходным файлом.Я использую CMake для его компиляции, первоначально так:
add_library(libOEInfoProvider SHARED
${CMAKE_CURRENT_LIST_DIR}/src/OE/InfoProvider.h
${CMAKE_CURRENT_LIST_DIR}/src/OE/InfoProvider.cpp)
# see: https://stackoverflow.com/a/25681179/276451
target_include_directories(libOEInfoProvider
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:dist/include>)
Теперь я настроил его так, чтобы make install
генерировал все необходимые файлы в папке dist
, например:
install(TARGETS libOEInfoProvider EXPORT libOEInfoProviderConfig
LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/dist/lib
)
install(DIRECTORY
src/ DESTINATION ${CMAKE_SOURCE_DIR}/dist/include)
install(EXPORT
libOEInfoProviderConfig DESTINATION ${CMAKE_SOURCE_DIR}/dist/cmake)
export(TARGETS libOEInfoProvider FILE libOEInfoProviderConfig.cmake)
Проблема, с которой я столкнулся, состоит в том, что сгенерированные файлы .cmake
содержат абсолютных путей к папке dist
, но мне нужно развернуть эту библиотеку где-нибудь еще с другой структурой каталогов.Поэтому мне нужно иметь относительные пути в .cmake
, поэтому, где бы я ни размещал библиотеку, в тот момент, когда я использую find_package
в клиентском коде, он сможет найти код.