如何将CMake配置添加到构建树中



我的项目中有一个带有cmake配置文件的共享库。如何使它在构建树中可用,以便在使用find_package之前不必安装它?

我正在寻找的机制是export(PACKAGE <PackageName>)。请注意,自3.15以来,该命令默认情况下不执行任何操作,因为填充用户包注册表会在源树和构建树之外产生影响。您必须设置CMAKE_EXPORT_PACKAGE_REGISTRY变量才能将生成目录添加到CMAKE用户包注册表中。

我能够让事情像这样运转:

install(
TARGETS ${TARGET_LIB}
EXPORT TARGET_LIB_EXPORTS  # Define exports
FILE "${PROJECT_NAME}-targets.cmake"
…
)
# Create targets file in build tree
export(
EXPORT TARGET_LIB_EXPORTS
FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake"
NAMESPACE ${PROJECT_NAME}::
)
# Create config file in build tree
configure_package_config_file(
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
)
# Create version config file in build tree
write_basic_package_version_file(
"${PROJECT_NAME}-config-version.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
# Export the package to make find_package work in build
set(CMAKE_EXPORT_PACKAGE_REGISTRY true)
export(PACKAGE ${PROJECT_NAME})

基本配置文件如下所示:

@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")

最新更新