当前位置: 首页 > news >正文

cmake configure_package_config_file指令详解

在 CMake 中,configure_package_config_file 命令用于生成包配置文件(Package Configuration File),这些文件用于指定如何使用和链接某个库或工具。通常情况下,这些文件用于支持 CMake 的 find_package 命令来查找和加载已安装的软件包。

使用方法

configure_package_config_file("input_file""output_file"[INSTALL_DESTINATION <dir>][PATH_VARS var1 var2 ...][NO_CHECK_REQUIRED_COMPONENTS][NO_SET_AND_CHECK_MACRO][GENERATE_DEFAULT_CONFIG_YES][GENERATE_DEFAULT_CONFIG_NO][INSTALL_PREFIX <prefix>][NAMESPACE <namespace>][INCLUDE_DIRS_VAR <include-var>][DEPENDENCIES <deps>]
)

参数解释

  • “input_file”:输入的模板配置文件。通常是一个 .in 文件,其中包含变量和 CMake 的配置命令。
  • “output_file”:生成的包配置文件的输出路径。
  • INSTALL_DESTINATION dir:指定安装的目标路径。
  • PATH_VARS var1 var2 …:指定需要在包配置文件中展开为绝对路径的变量列表。
  • NO_CHECK_REQUIRED_COMPONENTS:禁用对所需组件的检查。
  • NO_SET_AND_CHECK_MACRO:禁用设置和检查宏。
  • GENERATE_DEFAULT_CONFIG_YES:生成默认的配置选项为 YES。
  • GENERATE_DEFAULT_CONFIG_NO:生成默认的配置选项为 NO。
  • INSTALL_PREFIX :指定安装前缀。
  • NAMESPACE :设置 CMake 的命名空间。
  • INCLUDE_DIRS_VAR :包含目录变量。
  • DEPENDENCIES :依赖项。

示例
假设有一个库名为 MyLib,其安装目录结构如下:

install/
├── include/
│   └── mylib/
│       └── mylib.h
├── lib/
│   ├── libmylib.a
│   └── libmylib.so
└── cmake/└── MyLibConfig.cmake.in

在 MyLibConfig.cmake.in 文件中,可能包含类似以下内容的配置模板:

@PACKAGE_INIT@# Set the include directory for MyLib
set(MyLib_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include")# Set the library directory for MyLib
set(MyLib_LIBRARIES "${CMAKE_INSTALL_PREFIX}/lib/libmylib.a")# Provide the version of MyLib
set(MyLib_VERSION "${PACKAGE_VERSION}")# Export the targets from the build tree
export(TARGETS MyLib FILE "${CMAKE_CURRENT_BINARY_DIR}/MyLibTargets.cmake")# Configure MyLibConfigVersion.cmake
include(CMakePackageConfigHelpers)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake"VERSION ${PACKAGE_VERSION}COMPATIBILITY SameMajorVersion
)# Install MyLibConfig.cmake and MyLibConfigVersion.cmake
install(FILES"${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake""${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake"DESTINATION "${CMAKE_INSTALL_PREFIX}/cmake"
)

在顶层的 CMakeLists.txt 文件中,通过 configure_package_config_file 命令生成 MyLibConfig.cmake 文件:

include(CMakePackageConfigHelpers)set(PACKAGE_VERSION 1.0.0)
set(INSTALL_CMAKE_DIR "cmake" CACHE PATH "Installation directory for CMake files")configure_package_config_file(MyLibConfig.cmake.in${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmakeINSTALL_DESTINATION ${INSTALL_CMAKE_DIR}PATH_VARS CMAKE_INSTALL_PREFIX
)install(FILES${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmakeDESTINATION${INSTALL_CMAKE_DIR}
)

在这个示例中,configure_package_config_file 命令会根据 MyLibConfig.cmake.in 文件生成实际的 MyLibConfig.cmake 文件,将路径变量 ${CMAKE_INSTALL_PREFIX} 替换为实际的安装路径,然后安装到指定的路径中。

通过这种方式,生成的包配置文件可以支持 find_package(MyLib) 命令的使用,帮助用户方便地集成和使用已安装的库。

相关文章:

cmake configure_package_config_file指令详解

在 CMake 中&#xff0c;configure_package_config_file 命令用于生成包配置文件&#xff08;Package Configuration File&#xff09;&#xff0c;这些文件用于指定如何使用和链接某个库或工具。通常情况下&#xff0c;这些文件用于支持 CMake 的 find_package 命令来查找和加…...

准备跳槽了(仍然底层为主,ue独立游戏为辅)

思考再三&#xff0c;准备跳槽了。 一、跳槽原因&#xff1a; 今年经济形势非常不好。那我为什么还要跳槽呢&#xff1f;因为干不下去了。公司是末位淘汰制&#xff0c;而我绩效垫底了。给我的整改措施中&#xff0c;部门经理让我三个月搞定60个bug&#xff0c;我觉得简直是送…...

汽车免拆诊断案例 | 卡罗拉急加速抖动故障排除

车型信息 2017年改款卡罗拉&#xff0c;排量1.2T&#xff0c;行驶里程48800公里。 故障现象 车辆不管在什么状态下&#xff0c;只要是平缓加速&#xff0c;都不会有抖动。车辆静止时&#xff0c;急加速时&#xff0c;也不会有抖动。但是车速达40公里/小时以上&#xff0c;急加…...

【JAVA】深入理解Hutool中的Pair、Triple和Tuple:组合数据的新方式,方法返回多个值,嘎嘎香,谁用谁知道,比原生好用更强大

Hutool 是一个开源的 Java 工具库&#xff0c;提供了丰富且实用的功能&#xff0c;旨在减少 Java 程序员在日常开发中重复造轮子的工作。在 Hutool 中&#xff0c;Pair、Triple 和 Tuple 是三种用于组合和存储不同数量相关联数据的类。以下是这三个类的简介&#xff1a; 1、添…...

modulepreload 对性能的影响

一、正面影响 减少加载时间&#xff1a; modulepreload 可以让浏览器提前下载模块脚本&#xff0c;减少页面加载时间&#xff0c;特别是对于依赖较多的复杂应用。这种预加载可以让浏览器在遇到 modulepreload 链接时立即开始下载&#xff0c;而不是等到实际需要时才下载提升用…...

问题:向上对齐对象的快捷键是: #学习方法#笔记

问题&#xff1a;向上对齐对象的快捷键是: A、T B、L C、R D、W 参考答案如图所示...

C# 4.List

comboBox使用的下拉框 Lsit 列表 1 创建List对象 List<string> list new List<string>(); 2 Add给list 添加元素 list.Add("吃饭"); list.Add("睡觉"); list.Add("打豆豆"); 3 删除一个元素 list.Remove("吃饭"); // 删…...

界面控件DevExpress Blazor UI v24.1 - 发布全新TreeList组件

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…...

docker默认存储地址 var/lib/docker 满了,换个存储地址操作流程

1. 查看docker 存储地址 docker info如下 var/lib/docker2、查看内存大小 按需执行 df -h 找超过100M的大文件 find / -type f -size 100M -exec ls -lh {} \; df -Th /var/lib/docker 查找这个文件的容量 df -h 查找所有挂载点 du -hs /home/syy_temp/*1、df -h 2、sud…...

SpringMVC的底层工作原理?

1.用户发送请求至前端控制器DispatcherServlet. 2.DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器 3.HandlerMapping找到具体的处理器(可以根据 xml 配置、注解进行查找&#xff09;&#xff0c;生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherSe…...

PyTorch 深度学习实践-处理多维特征的输入

视频指路 参考博客笔记 参考笔记二 通过多个线性模型来模拟非线性的空间变换&#xff0c;矩阵计算就是不同维度之间的空间转换 说明&#xff1a;1、乘的权重(w)都一样&#xff0c;加的偏置(b)也一样。b变成矩阵时使用广播机制。神经网络的参数w和b是网络需要学习的&#xff0c…...

常见逻辑漏洞举例

文章目录 简介用户名可枚举验证码可绕过/验证码回传越权访问任意密码修改验证码回传订单金额任意修改URL跳转漏洞短信轰炸找回密码还有很多逻辑漏洞&#xff0c;其实并没有什么技巧&#xff0c;要分析清楚他的业务逻辑&#xff0c;可能很多正常的流程中就存在着逻辑漏洞。 简介…...

FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口&#xff0c;我们每个接口异常返回的数据格式都不一样&#xff0c;处理起来也没有那么方便&#xff0c;因此我们可以封装一个统一的json。 from fastapi import status from fastapi.responses import JSONResponse, Response from typing import Unionde…...

tg小程序前端-dogs前端源码分析

tg小程序前端-dogs前端源码分析 前端源码 index.html <!DOCTYPE html> <html lang="en"><head><script src="https://telegram.org/js/telegram-web-app.js" onload="window.Telegram.WebApp.expand(); window.Telegram.WebA…...

Linux——多路复用之select

目录 前言 一、select的认识 二、select的接口 三、select的使用 四、select的优缺点 前言 在前面&#xff0c;我们学习了五种IO模型&#xff0c;对IO有了基本的认识&#xff0c;知道了select效率很高&#xff0c;可以等待多个文件描述符&#xff0c;那他是如何等待的呢&a…...

探索.NET内存之海:垃圾回收的艺术与实践

简述 在.NET的广阔天地中&#xff0c;内存管理如同航海中的罗盘&#xff0c;指引着程序的稳健运行和性能的极致优化。作为软件工程师&#xff0c;我们时常在代码的海洋中航行&#xff0c;而内存管理则是确保航程顺畅的关键。本文将带您深入.NET的内存管理世界&#xff0c;一探垃…...

路由数据获取及封装方法

数据库设计 自联表 定义tree字段 public class LabelValue{public int label { get; set; }public string? value { get; set; }public List<LabelValue> children { get; set; }}获取路由方法 public Response<object> getMenuList() {Response<object>…...

Visual Studio Code 实现远程开发

Background 远程开发是指开发人员在本地计算机上进行编码、调试和测试&#xff0c;但实际的开发环境、代码库或应用程序运行在远程服务器上。远程开发的实现方式多种多样&#xff0c;包括通过SSH连接到远程服务器、使用远程桌面软件、或者利用云开发环境等。这里我们是使用VSCo…...

基于STM32设计的人体健康监测系统(华为云IOT)(189)

基于STM32设计的人体健康监测系统(华为云IOT)(189) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架【3】ESP8266模块配置【4】上位机开发思路【5】供电方式1.3 项目开发背景【1】选题的意义【2】可行性分析【…...

开源防病毒工具--ClamAV

产品文档&#xff1a;简介 - ClamAV 文档 开源地址&#xff1a;Cisco-Talos/clamav&#xff1a;ClamAV - 文档在这里&#xff1a;https://docs.clamav.net (github.com) 一、引言 ClamAV&#xff08;Clam AntiVirus&#xff09;是一个开源的防病毒工具&#xff0c;广泛应用…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...