增加输出配置的方法


You
You 2023-12-31 01:31:33 66422
分类专栏: 资讯

增加输出配置

在本教程的“(第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时如何声明项目的外部依赖关系。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=33123
赞同 0
评论 0 条
YouL0
粉丝 0 发表 582 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1323
银河麒麟打印带有图像的文档时出错  1236
银河麒麟添加打印机时,出现“server-error-internal-error”  1023
统信桌面专业版【如何查询系统安装时间】  951
统信操作系统各版本介绍  944
统信桌面专业版【全盘安装UOS系统】介绍  903
麒麟系统也能完整体验微信啦!  889
统信【启动盘制作工具】使用介绍  499
统信桌面专业版【一个U盘做多个系统启动盘】的方法  441
信刻全自动档案蓝光光盘检测一体机  386
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!