增加输出配置
在本教程的“(第4步)安装和测试”中,我们添加了CMake的功能,以安装项目的库和头文件。在"(第7步)构建安装程序"期间,我们添加了打包此资料的功能,以便可以将其分发给其他人。
下一步是添加必要的信息,以便其他CMake项目可以使用我们的项目,无论是从构建目录,本地安装还是打包的文件。
第一步是更新我们的install(TARGETS)命令,不仅要指定DESTINATION,还要指定EXPORT。EXPORT关键字生成并安装一个CMake文件,该文件包含用于从安装树中导入install命令中列出的所有目标的代码。因此,让我们继续,通过更新MathFunctions/CMakeLists.txt中的install命令显式EXPORTMathFunctions库,如下所示:
安装(目标 MathFunctionstutorial_compiler_flags
DESTINATION lib
EXPORT MathFunctionsTargets)
安装(文件 MathFunctions.h 目标包括)
现在我们已经导出了MathFunctions,我们还需要显式安装生成的MathFunctionsTargets.cmake文件。这是通过将以下内容添加到顶级CMakeLists.txt的底部来完成的:
安装(导出 MathFunctionsTargets
文件 MathFunctionsTargets.cmake
目标 lib/cmake/MathFunctions
)
此时,您应该尝试运行CMake。如果一切设置正确,您将看到CMake将生成如下错误:
目标“MathFunctions”INTERFACE_INCLUDE_DIRECTORIES 属性包含
路径:
“/Users/robert/Documents/CMakeClass/Tutorial/Step11/MathFunctions”,
其前缀在源目录中。
CMake试图说的是,在生成导出信息的过程中,它将导出与当前机器固有联系的路径,并且在其他机器上无效。解决方案是更新MathFunctionstarget_include_directories,以了解从构建目录和install/包中使用它时需要不同的INTERFACE位置。这意味着将MathFunctions的target_include_directories调用转换为:
target_include_directories(MathFunctions
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
更新后,我们可以重新运行CMake并确认它不再发出警告。
至此,我们已经正确地打包了CMake所需的目标信息,但仍然需要生成MathFunctionsConfig.cmake,以便CMake find_package命令可以找到我们的项目。因此,我们继续将名为Config.cmake.in新文件添加到项目顶层项目的顶层目录,其内容如下:
@PACKAGE_INIT@
include (“${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake”)
然后,要正确配置和安装该文件,请将以下内容添加到顶级CMakeLists.txt的底部:
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)
include(CMakePackageConfigHelpers)
# 生成包含导出的配置文件 configure_package_config_file
(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/MathFunction sConfig.cmake "
INSTALL_DESTINATION "lib/cmake/example"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# 生成配置文件的版本文件
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake"
VERSION "${Tutorial_VERSION_MA JOR}.${Tutorial_VERSION_MINOR}"
兼容性 AnyNewerVersion
)
# 安装配置文件
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake
DESTINATION lib/cmake/MathFunctions
)
至此,我们为项目生成了可重定位的CMake配置,可以在安装或打包项目后使用它。如果我们也希望从构建目录中使用我们的项目,则只需将以下内容添加到顶级CMakeLists.txt的底部:
导出(导出 MathFunctionsTargets
文件“${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsTargets.cmake”
)
通过此导出调用,我们现在生成一个Targets.cmake,允许在构建目录中配置的MathFunctionsConfig.cmake由其他项目使用,而无需安装它。
导入一个CMake项目(消费者)
本示例说明项目如何查找生成Config.cmake文件的其他CMake软件包。
它还显示了在生成Config.cmake时如何声明项目的外部依赖关系。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!