CMake官方教程中文翻译 Step 11: Adding Export Configuration

鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。
英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里
或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html

因为官方文档有点多,所以只截取CMake Tutorial的 step1——step12 进行翻译,这是第11步的翻译,以下是每一步的翻译链接:
Documentation » CMake Tutorial » Step 1: A Basic Starting Point
Documentation » CMake Tutorial » Step 2: Adding a Library
Documentation » CMake Tutorial » Step 3: Adding Usage Requirements for a Library
Documentation » CMake Tutorial » Step 4: Adding Generator Expressions
Documentation » CMake Tutorial » Step 5: Installing and Testing
Documentation » CMake Tutorial » Step 6: Adding Support for a Testing Dashboard
Documentation » CMake Tutorial » Step 7: Adding System Introspection
Documentation » CMake Tutorial » Step 8: Adding a Custom Command and Generated File
Documentation » CMake Tutorial » Step 9: Packaging an Installer
Documentation » CMake Tutorial » Step 10: Selecting Static or Shared Libraries
[Documentation » CMake Tutorial » Step 11: Adding Export Configuration]
Documentation » CMake Tutorial » Step 12: Packaging Debug and Release

谷歌翻译可能有错,此文档的目的仅是加快观看英文官方文档的速度,所以请结合英文官方文档观看

Step 11: Adding Export Configuration

在本教程的安装和测试期间,我们添加了 CMake 安装项目库和标头的功能。 在打包安装程序期间,我们添加了打包此信息的功能,以便可以将其分发给其他人。

下一步是添加必要的信息,以便其他 CMake 项目可以使用我们的项目,无论是来自构建目录、本地安装还是打包时。

第一步是更新我们的 install(TARGETS) 命令,不仅指定 DESTINATION,还指定 EXPORT。 EXPORT 关键字生成一个 CMake 文件,其中包含用于从安装树导入安装命令中列出的所有目标的代码。 因此,让我们继续通过更新 MathFunctions/CMakeLists.txt 中的安装命令来显式导出 MathFunctions 库,如下所示:

MathFunctions/CMakeLists.txt
set(installable_libs MathFunctions tutorial_compiler_flags)
if(TARGET SqrtLibrary)
list(APPEND installable_libs SqrtLibrary)
endif()
install(TARGETS ${installable_libs}
EXPORT MathFunctionsTargets
DESTINATION lib)
# install include headers
install(FILES MathFunctions.h DESTINATION include)

现在我们已经导出了 MathFunctions,我们还需要显式安装生成的 MathFunctionsTargets.cmake 文件。 这是通过将以下内容添加到顶级 CMakeLists.txt 的底部来完成的:

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

此时您应该尝试运行 CMake。 如果一切设置正确,您将看到 CMake 将生成如下错误:

Target “MathFunctions” INTERFACE_INCLUDE_DIRECTORIES property contains
path:

“/Users/robert/Documents/CMakeClass/Tutorial/Step11/MathFunctions”

which is prefixed in the source directory.

CMake 想说的是,在生成导出信息的过程中,它将导出一条与当前机器本质上相关的路径,并且在其他机器上无效。 解决方案是更新 MathFunctions target_include_directories() 以了解在构建目录和安装/包中使用它时需要不同的接口位置。 这意味着将 MathFunctions 的 target_include_directories() 调用转换为如下所示:

MathFunctions/CMakeLists.txt
target_include_directories(MathFunctions
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)

更新后,我们可以重新运行 CMake 并验证它是否不再发出警告。

此时,我们已经 CMake 正确打包了所需的目标信息,但我们仍然需要生成 MathFunctionsConfig.cmake,以便 CMake find_package() 命令可以找到我们的项目。 因此,让我们继续将一个名为 Config.cmake.in 的新文件添加到项目的顶层,其中包含以下内容:

Config.cmake.in

@PACKAGE_INIT@

include ( “${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake” )

然后,要正确配置和安装该文件,请将以下内容添加到顶级 CMakeLists.txt 的底部:

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

include(CMakePackageConfigHelpers)

接下来,我们执行configure_package_config_file()。 此命令将配置提供的文件,但与标准的 configure_file() 方式有一些具体差异。 为了正确利用此功能,输入文件除了所需的内容之外还应该有一行包含文本@PACKAGE_INIT@。 该变量将被替换为将设置值转换为相对路径的代码块。 这些新值可以通过相同的名称引用,但前面带有 PACKAGE_ 前缀。

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

include(CMakePackageConfigHelpers)
# generate the config file that includes the exports
configure_package_config_file( C M A K E C U R R E N T S O U R C E D I R / C o n f i g . c m a k e . i n " {CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in " CMAKECURRENTSOURCEDIR/Config.cmake.in"{CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
INSTALL_DESTINATION “lib/cmake/example”
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

接下来是 write_basic_package_version_file()。 此命令写入一个由 find_package() 使用的文件,记录所需包的版本和兼容性。 在这里,我们使用Tutorial_VERSION_*变量并说它与AnyNewerVersion兼容,这表示该版本或任何更高版本都与请求的版本兼容。

CMakeLists.txt
write_basic_package_version_file(
“${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake”
VERSION “${Tutorial_VERSION_MAJOR}.${Tutorial_VERSION_MINOR}”
COMPATIBILITY AnyNewerVersion
)

最后,设置要安装的两个生成的文件:

CMakeLists.txt
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake
DESTINATION lib/cmake/MathFunctions
)

至此,我们已经为项目生成了可重定位的 CMake 配置,可以在项目安装或打包后使用。 如果我们希望我们的项目也可以从构建目录中使用,我们只需将以下内容添加到顶层 CMakeLists.txt 的底部:

CMakeLists.txt
export(EXPORT MathFunctionsTargets
FILE “${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsTargets.cmake”
)

通过此导出调用,我们现在生成一个 MathFunctionsTargets.cmake,允许其他项目使用构建目录中配置的 MathFunctionsConfig.cmake,而无需安装它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例&#xff1a;比特币的可扩展性挑战8.1.3 拓展案例 1&#xff1a;以太坊的可扩展性改进8.1.4 拓展案例 2&#xff1a;侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例&#xff1a;比特币交易的安全性8.…

linux查询文件夹及文件数目

1.查询文件夹下的文件夹数目 expr $(find ./uploud_from_machine/formal_dom/18 -maxdepth 1 -type d | wc -l) - 1 2.查询文件夹下的文件数目 要统计目录中的所有项&#xff08;文件和子目录&#xff09;&#xff0c;但不包括目录本身&#xff0c;可以使用以下命令&#xf…

DVI接口如何连接HDMI接口显示器?DVI转HDMI转换器DHA

DVI转HDMI转换器DHA简介 DVI转HDMI转换器DHA能够将DVI信号和R/L音频信号输入转换成HDMI信号输出,独特的功能使其顺畅地整合到家庭影院中&#xff0c;并且播放出高品质的图像。主要用于数据监控中心、大型会议展示中心、学校及各个公司 DVI转HDMI转换器DHA特点 01.支持分辨率4K…

网络协议 TCP协议

网络协议 TCP协议 文章目录 网络协议 TCP协议1. TCP协议段格式2. 可靠传输保障机制2.1 确认应答2.2 超时重传 3. 连接保障机制3.1 三次握手&#xff08;建立连接&#xff09;3.2 四次挥手&#xff08;断开连接&#xff09;3.3 TCP状态转换过程 4. 传输效率保障机制4.1 滑动窗口…

MySQL原理(二)存储引擎(1)概述

一、存储引擎介绍 1、概念&#xff1a; &#xff08;1&#xff09;MySQL中的数据用各种不下同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎…

中国社科院与英国斯特灵大学——认证与不认证都颁发什么证书

随着在职研究生改革的不断深入&#xff0c;越来越多的在职人士报考在职研究生&#xff0c;在职博士&#xff0c;提升自己的学历和能力。中外合作办学博士是在职博士报考方式之一&#xff0c;是由国内的院校和国外院校合作开办的在职博士教育形式&#xff0c;分可认证和不可认证…

【全csdn最前沿LVGL9】按钮的使用(lv_button)、标签的使用(lv_label)

文章目录 前言一、按钮概述二、按钮的使用2.1 创建一个按钮2.2 按钮的样式 三、标签概述四、标签的使用4.1 创建一个标签4.2 样式4.3 设置文本4.4 长文本模式4.5 文本选择4.6 文本对齐4.7 非常长的文本4.8 字体设置字体支持的Unicode字符字体列表特殊的字体 总结 前言 欢迎来到…

Unity使用反向遮罩实现镂空shader

实现步骤&#xff1a; 1&#xff0c;创建两个材质球&#xff0c;遮罩层的属性如下&#xff1a; 被遮罩层的属性如下&#xff1a; 2&#xff0c;使用两张image&#xff0c;遮罩层在父节点&#xff0c;被遮罩层在子节点&#xff0c;然后分别添加材质球与镂空图片 实现效果如下&a…

k8s存储之PV、PVC

在k8s集群中&#xff0c;资源存储会散落到各个工作节点上&#xff0c;这样对用资源调用很不方便&#xff0c;那么k8s是如何实现存储资源共享的呢&#xff0c;本文浅尝辄止的探讨一下&#xff0c;k8s是通过pv、pvc实现的。 一、PV、PVC的概念 1、持久卷(PV&#xff09; pv是Pe…

2024-01-07-AI 大模型全栈工程师 - AI 产品部署和交付

摘要 2024-01-07 周日 杭州 阴 本节内容: 如何选择 GPU 和云服务器&#xff0c;追求最高性价比如何部署自己的 fine-tune 的模型&#xff0c;向业务提供高可用服务如何控制内容安全&#xff0c;做好算法备案&#xff0c;确保合规 课程内容 1. 硬件选型 a. Nvidia 几乎是模…

W801学习笔记十:HLK-W801制作学习机/NES游戏机(总结)

本章总结一下整个开发过程中遇到的问题&#xff1a; 1、引脚的抗干扰问题&#xff1a; 屏幕显示的时候&#xff0c;概率出现花屏。无论怎么修改代码都不能解决&#xff0c;一个偶然的机会&#xff0c;发现当手触摸屏幕的WR和CS引脚时&#xff0c;屏幕会正常。查阅资料&#x…

C# 递归执行顺序

为了方便进一步理解递归&#xff0c;写了一个数字输出 class Program {static void Main(string[] args){int number 5;RecursiveDecrease(number);}static void RecursiveDecrease(int n){if (n > 0){Console.WriteLine("Before recursive call do : " n);Rec…

IAR编译和调试CMS32L051

0 Preface/Foreword 0.1 参考文档 中微半导体BAT系列单片机学习笔记_V1.1.pdf 1 配置方法 1.1 编译工具链添加 CMS对于IAR工具&#xff0c;有一个插件文件&#xff0c;用于安装对应的CMS系列芯片。 工具名称&#xff1a;iar_plug20210926.7z 按照完成之后&#xff0c;可…

[Python小工具]Python批量生成数据到MySQL

[Python小工具]Python批量生成数据到MySQL base.py #!/usr/bin/python # -*- coding:utf-8 -*- import time import random from datetime import datetime, timedelta from faker import Faker import stringfake Faker(zh_CN)class Base_conn:# 数据库连接配置初始化def _…

如果我要访问一个网址,那么在网络中会有哪些过程

访问一个网址是我们日常网络使用中非常常见的操作&#xff0c;背后涉及到一系列精密而复杂的步骤。这个过程包括DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、服务器响应、浏览器渲染等环节。在这篇文章中&#xff0c;我们将深入探讨这些步骤&#xff0c;并解释它们在…

redis配置信息整理

redis部署分为几种方式&#xff1a;单机、哨兵&#xff08;主从&#xff09;、集群。对应这几种部署方式redis的配置信息也有不同&#xff0c;总结如下&#xff1a; 单机模式&#xff1a; spring:redis:database: 0timeout: 8000password: 123456host: 192.168.56.101port: 6…

强大的虚拟机Parallels Desktop 19 mac中文激活

Parallels Desktop是一款功能全面、易于使用的虚拟机软件&#xff0c;它为用户提供了在Mac电脑上同时运行多个操作系统的便利。 软件下载&#xff1a;Parallels Desktop 19 mac中文激活版下载 Parallels Desktop 19 mac具有快速启动和关闭虚拟机的能力&#xff0c;让用户能够迅…

基于SpringBoot+Vue学科竞赛管理系统

文章目录 基于SpringBootVue学科竞赛管理系统1系统概述1.3系统设计思想 2相关技术2.1 MYSQL数据库2.2 B/S结构2.3 Spring Boot框架简介2.4 Vue简介 3系统分析3.1可行性分析3.1.1技术可行性3.1.2经济可行性3.1.3操作可行性 3.2系统性能分析3.2.1 系统安全性3.2.2 数据完整性 3.4…

Wampserver 切换中文时无法启动报错处理

在使用 Wampserver 软件时默认为英语&#xff0c;可以看到有语言选择功能&#xff0c;切换其他语言。但选择中文切换后&#xff0c;软件重启时报如下错误&#xff1a; The configuration file contains a systax error on line 44:[EParseError] Mismatched or misplaced quoue…

(十六)串口UART

文章目录 UART简介传输数据帧和波特率定时器1作为串口1波特率发生器串口部分相关寄存器TMODAUXRPCONSCONSBUF 串口1工作模式1&#xff1a;8位UART&#xff0c;波特率可变总体工作原理如何简单接收一个字符和发送数据一步之遥的设置现象演示 UART简介 通用异步收发传输器(Unive…