CMake学习笔记:项目的导出和安装-install命令

news2024/10/8 10:19:37

一、基本语法与概念

1.文件的安装 install(FILES)

用Poco库 usr/local/poco/CMakeLists.txt中内容 举例如下:

2.目标安装 install(TARGETS)

3.导出目标与导出配置文件

将目标mylib导出名为MyModules的目标。MyModules导出目标包含了关于mylib的所有信息,包括头文件路径、库文件路径等内容

#生成导出目标MyModules
install(
    TARGETS mylib
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    EXPORT MyModules           #指定导出目标
)

将该导出MyModules目标转换为对应的 *.cmake 文件,*.cmake 文件为导出配置文件,指定导出目标的安装策略。*.cmake文件导出到DESTINATION指定的路径下。

install(
    EXPORT MyModules
    FILE MyModules.cmake
    DESTINATION lib/cmake/MyModules
)

4.安装

语句:sudo make install

运行 sudo make install 后在安装路径下自动生成了MyModules.cmake导出配置文件

5.XXXConfig.cmake文件

XXXConfig.cmake文件用于其他项目通过find_package命令找到和使用XXX这个库‌。XXXConfig.cmake可以只有一行代码,如下

include("${CMAKE_CURRENT_LIST_DIR}/MyModules.cmake")

configure_package_config_file自动生成XXXConfig.cmake文件、XXXConfig.cmake.in文件的编写、导出XXXConfig.cmake文件后续会补充进来。

二、示例代码

1.任务需求

2.项目目录

3.mylib的CMakeLists.txt文件

#导出静态库
add_library(mylib src/mylib.cpp)

#设置编译和运行路径
target_include_directories(
    mylib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)
#生成导出目标MyModules
install(
    TARGETS mylib
    EXPORT MyModules   #指定导出目标
    ARCHIVE DESTINATION lib
)
#导出目标是虚拟概念,要把导出目标转化为导出配置文件
#生成导出配置文件.cmake

4.mylib2的CMakeLists.txt文件

#导出静态库
add_library(mylib2 src/mylib2.cpp)

#设置编译和运行路径
target_include_directories(
    mylib2 PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)

install(
    TARGETS mylib2
    EXPORT MyModules   #指定导出目标
    DESTINATION lib
)

5.INSTALLDEMO项目的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.30)
project(InstallDemo)

add_subdirectory(mylib)
add_subdirectory(mylib2)

#把导出目标生成导出配置文件并且安装到指定路径
#导出配置文件是由导出目标自动生成的
install(
    EXPORT MyModules
    FILE MyModules.cmake
    DESTINATION lib/cmake/MyModules
)

6.运行结果

7.在其他项目使用生成的XXXConfig.cmake文件 

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

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

相关文章

【初阶数据结构】冒泡排序和选择排序(用C语言实现,主要讲思维)

文章目录 前言1. 冒泡排序1.1 算法思想1.2 冒泡排序的代码实现1.3 冒泡排序算法的改进 2. 选择排序2.1 算法思想2.2 选择排序的代码实现 3. 写排序算法的小技巧 前言 讲到排序相信大家一定对一种排序很熟悉&#xff0c;它的名字就叫做冒泡排序。这个排序大家在学习各种语言时&…

【优选算法】(第二十六篇)

目录 两数相加&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 两两交换链表中的节点&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 两数相加&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;…

随着硬件水平的提升,LabVIEW有哪些过去的编程方法被淘汰掉了

随着硬件水平的不断提升&#xff0c;尤其是处理器性能、存储能力、通信速度等方面的飞跃&#xff0c;LabVIEW的一些早期编程方法逐渐被更高效、现代的编程技术所取代。以下是一些随着硬件升级而逐步淘汰的LabVIEW编程方法和技术&#xff1a; 1. 低效的数据流传输方式 过去由于…

SQL执行顺序是如何工作的,为什么它如此重要?

&#x1f3af;SQL执行顺序是如何工作的&#xff0c;为什么它如此重要&#xff1f; SQL查询按照以下顺序执行其语句&#xff1a; 1️⃣FROM / JOIN 2️⃣WHERE 3️⃣GROUP BY 4️⃣HAVING 5️⃣SELECT 6️⃣DISTINCT 7️⃣ORDER BY 8️⃣LIMIT / OFFSET 你在每个步骤中实现的技…

特定类型的图与应用 - 离散数学系列(六)

目录 1. 树和生成树 树的定义 生成树与最小生成树 2. 二分图 二分图的定义 示例&#xff1a;最大匹配问题 3. 欧拉图与哈密顿图 欧拉图 哈密顿图 4. 实际应用场景 1. 文件系统中的树结构 2. 网络优化中的最小生成树 3. 社交网络分析 5. 例题与练习 例题1&#xf…

sv标准研读第十三章-task和function

书接上回&#xff1a; sv标准研读第一章-综述 sv标准研读第二章-标准引用 sv标准研读第三章-设计和验证的building block sv标准研读第四章-时间调度机制 sv标准研读第五章-词法 sv标准研读第六章-数据类型 sv标准研读第七章-聚合数据类型 sv标准研读第八章-class sv标…

【直接原地起飞】3DMAX2025热门插件合集来啦!

强烈推荐8款3DMAX2025热门插件&#xff01; 在3DMAX的广阔世界里&#xff0c;插件如同魔法工具&#xff0c;为设计师们打开了无限创意的大门。今天&#xff0c;我们精心挑选了8款热门插件&#xff0c;它们不仅功能强大&#xff0c;而且易于上手&#xff0c;定能让你的3D设计之旅…

Python从0到100(六十二):机器学习实战-预测波士顿房价

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

增强分析:新时代的数据洞察工具

随着数据科学和人工智能的迅猛发展&#xff0c;分析数据的方式也发生了显著的变化。增强分析&#xff08;Augmented Analytics&#xff09;是近年来涌现出的新概念&#xff0c;它将人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和自然语言处理&…

操作系统 | 学习笔记 | 王道 | 4.2 目录

4.2 目录 4.2.1 目录的基本概念 文件目录指FCB的有序集合&#xff0c;一个FCB就是一个文件的目录项。与文件管理系统和文件集合相关联的是文件目录&#xff0c;它包含有关文件的属性、位置和所有权等。 目录管理的基本要求&#xff1a; 从用户的角度看&#xff0c;目录在用户…

win11下AMD CPU支持WSL2

除开常规的配置&#xff1a; 1.打开虚拟机 2.打开hyper-v 3.bios启用虚拟机 还需要做如下操作: 管理员方式进入Powershell: bcdedit /set hypervisorlaunchtype auto 成功案例&#xff1a; win11: cpu: amd

00_概览_kafka

kafka 概述kafka版本流程启动zk配置zk启动命令 启动kafka修改server.properties启动命令 kafka脚本-命令行操作命令行创建主题脚本查看主题主题详情修改主题删除主题大量日志解决方案 控制台生产者消费者代码 生产者 消费者kafka-toolkafka数据文件 扩展横向扩展纵向扩展分区消…

【小沐学GIS】QGIS导出OpenStreetMap数据(QuickOSM、OSM)

文章目录 1、简介1.1 OSM1.2 QuickOSM1.3 Overpass Turbo 2、插件安装3、插件使用3.1 快速查询&#xff08;boundary边界&#xff09;3.2 快速查询&#xff08;railway铁路&#xff09;3.3 快速查询&#xff08;boundaryadmin_level行政边界&#xff09;3.4 快速查询&#xff0…

OpenFeign-查询参数-日期格式化:LocalDate、Date、@DateTimeFormat(低版本无效)

创建时间&#xff1a;2024-10-08 本文适用的依赖版本&#xff1a; spring-boot-starter-parent&#xff1a;3.3.3 spring-cloud-starter-openfeign&#xff1a;4.1.3 一、场景 在 REST API 的查询接口中&#xff0c;日期查询参数 的格式一般是标准&#xff08;ISO 8601&#x…

BiGRU-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 介绍 本文将介绍一种基于Transformer和BiGRU&#xff08;双向门控循环单元&#xff09;的混合模型及其在时间序列预测中的应用。本模特适用于多输入单输出预测&#xff0c;适合风电预测&#xff0c;功率预测&#xff0c;负荷预测等等。 2 方法 首先&#xff0c;从Excel文件…

常见数据库等保测评检查命令汇总

MySQL数据库 select user, host FROM mysql.user&#xff1b;查看管理用户 show variables like validate%; 查看口令策略 show variables like %password%; 查看口令策略 show variables like %general%; 查看日志是否开启 show variables like general_log%; 可以看查询日…

电磁兼容(EMC):PCB设计里的镜像面究竟是个啥?

目录 1. 镜像面概念 2. 镜像面示意 3. 镜像面工作原理 4. 总结 PCB设计中涉及到高频信号处理时经常会听到一个叫做镜像面的概念。镜像面究竟是哪个面&#xff1f;和我们平时所说的地平面和电源平面有什么区别&#xff1f; 1. 镜像面概念 镜像面是指高频信号在完整平面上的…

退货单不能反价值重估的操作

财务的工作效率几何级式倍增。29号做的退货单&#xff0c;30号就做了发票。业务员工作质量却是堪忧&#xff0c;退货单做了2次。这样的问题是常态&#xff0c;该如何避免呢&#xff1f; 从提示文字分析&#xff0c;不能弃审&#xff0c; 一般是单据被下游单据锁定导致的&#…

算法 | 模拟

目录 替换所有的问号 题解&#xff1a; 提莫攻击 题解&#xff1a; Z字形变换 题解&#xff1a; 外观数列 题解&#xff1a; 数青蛙 题解&#xff1a; 替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/re…