我有一个非常简单的库,其中包含头文件和源文件。我正在使用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
时,它都应该能够找到该代码。