网站首页设计参考/凌哥seo
CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中
code review!
文章目录
- CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中
- 1.`CMAKE_INSTALL_PREFIX`详解
- 变量作用
- 设置 `CMAKE_INSTALL_PREFIX`
- 示例
- 影响范围
- 常见用法
- 特别注意
- 总结
- 2.为什么我可以在这里找到我的可执行文件:devel/lib/ros_templete_pub/ros_templete_pub
- 构建目录结构
- 安装目录结构
- 流程解释
- 总结
1.CMAKE_INSTALL_PREFIX
详解
CMAKE_INSTALL_PREFIX
是 CMake 中的一个重要变量,它定义了安装路径的前缀,决定了项目安装目录的根位置。理解和正确使用 CMAKE_INSTALL_PREFIX
对于控制软件包的安装位置非常重要,特别是在多项目构建和部署环境中。
变量作用
CMAKE_INSTALL_PREFIX
决定了 make install
或 cmake --install
命令将项目文件安装到哪个根目录。默认情况下,它的值通常是 /usr/local
,但可以根据需要进行修改。
设置 CMAKE_INSTALL_PREFIX
可以在运行 cmake
命令时通过命令行参数设置 CMAKE_INSTALL_PREFIX
,例如:
cmake -DCMAKE_INSTALL_PREFIX=/desired/install/path ..
或者在 CMakeLists.txt
中设置:
set(CMAKE_INSTALL_PREFIX "/desired/install/path" CACHE PATH "Install path prefix")
示例
假设有一个简单的 CMake 项目:
cmake_minimum_required(VERSION 3.0)
project(MyProject)add_executable(my_executable main.cpp)install(TARGETS my_executableRUNTIME DESTINATION bin)
如果运行以下命令:
cmake -DCMAKE_INSTALL_PREFIX=/home/user/myproject_install ..
make
make install
那么 my_executable
会被安装到 /home/user/myproject_install/bin
目录中。
影响范围
CMAKE_INSTALL_PREFIX
影响所有相对路径的安装目标。例如,以下 CMake 语句:
install(TARGETS my_executable RUNTIME DESTINATION bin)
结合 CMAKE_INSTALL_PREFIX
,会将 my_executable
安装到 ${CMAKE_INSTALL_PREFIX}/bin
目录。
常见用法
-
默认安装路径:
- 默认值是
/usr/local
,适合系统全局安装。
- 默认值是
-
用户本地安装:
- 对于没有管理员权限的用户,可以将安装路径设为用户的主目录,例如
~/myproject_install
。
cmake -DCMAKE_INSTALL_PREFIX=~/myproject_install ..
- 对于没有管理员权限的用户,可以将安装路径设为用户的主目录,例如
-
自定义目录:
- 在构建环境中,可能需要将不同项目安装到特定目录中以避免冲突。
cmake -DCMAKE_INSTALL_PREFIX=/opt/myproject ..
特别注意
- CMake 缓存:
CMAKE_INSTALL_PREFIX
是一个缓存变量,如果修改了它,需要重新配置 CMake 或删除CMakeCache.txt
文件以确保新值生效。 - 相对路径: 如果给
CMAKE_INSTALL_PREFIX
赋值相对路径,它会被解释为相对于当前构建目录的路径。通常最好提供绝对路径以避免混淆。
总结
CMAKE_INSTALL_PREFIX
是一个关键变量,用于指定项目的安装根目录。通过正确设置这个变量,可以灵活地控制项目的安装位置,满足不同的部署需求。无论是全局安装、用户本地安装,还是特定目录安装,CMAKE_INSTALL_PREFIX
都能提供强大的支持。
2.为什么我可以在这里找到我的可执行文件:devel/lib/ros_templete_pub/ros_templete_pub
使用
install(TARGETS ros_templete_pubRUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
在 ROS(机器人操作系统)中,使用 Catkin 构建系统时,构建过程中生成的文件通常会放置在 devel
目录中。这是因为 Catkin 使用了两个主要的构建空间:devel
和 install
。下面解释为什么会在 devel/lib/ros_templete_pub/ros_templete_pub
找到可执行文件。
构建目录结构
devel
目录:- 该目录是开发空间(development space),在这里构建的文件可以直接使用而无需安装。
- 运行
catkin_make
或catkin build
时,生成的可执行文件和其他构建产物会放置在devel
目录下。 devel/lib
目录通常包含构建生成的可执行文件,因为在 ROS 中,lib 目录不仅用于库文件,也用于存放节点的可执行文件。
安装目录结构
install
目录:- 该目录是安装空间(install space),通过执行
catkin_make install
或catkin build --install
生成的文件会被安装到这里。 install
目录中的结构由 CMakeinstall
命令决定,例如install(TARGETS ...)
语句。
- 该目录是安装空间(install space),通过执行
流程解释
-
构建阶段:
- 当运行
catkin_make
或catkin build
时,CMake 会在devel
目录中生成所有构建产物。 - 可执行文件通常会放置在
devel/lib/<package_name>/
目录中。因此,会在devel/lib/ros_templete_pub/ros_templete_pub
找到的可执行文件。
- 当运行
-
安装阶段:
- 如果运行
catkin_make install
或catkin build --install
,CMake 会根据CMakeLists.txt
中的install
规则将文件安装到install
目录中。 - 例如,使用
install(TARGETS ros_templete_pub RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
会将ros_templete_pub
安装到${CMAKE_INSTALL_PREFIX}/bin
,即通常为install/bin/
。
- 如果运行
总结
在 devel/lib/ros_templete_pub/ros_templete_pub
找到可执行文件是因为:
- 开发空间: 在构建过程中,Catkin 默认将可执行文件放置在
devel
目录中,以便可以立即运行和测试这些文件,而无需执行安装步骤。 - 目录结构:
devel/lib/<package_name>/
是 Catkin 默认的可执行文件输出路径。
如果需要将可执行文件安装到其他位置,请使用 catkin_make install
或 catkin build --install
,并确保在的 CMakeLists.txt
中正确配置了 install
命令。
相关文章:

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中
CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中 code review! 文章目录 CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中1.CMAKE_INSTALL_PREFIX详解变量作用设置 CMAKE_INSTALL_PREFIX示例影响范围常见用法特别…...

数据结构之二叉树的超详细讲解(3)--(二叉树的遍历和操作)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 数据结构之二叉树的超详细讲解(3)--(二叉树的遍历和操作) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评…...

Arduino - 旋转编码器 - 伺服电机
Arduino - 旋转编码器 - 伺服电机 Arduino - Rotary Encoder In this tutorial, We are going to learn how to program Arduino to rotate a servo motor according to the rotary encoder’s output value. 在本教程中,我们将学习如何对Arduino进行编程ÿ…...

儿童电动音乐牙刷OTP芯片方案:NV040C,耐温耐压,抗干扰能力强
一:方案背景概述 随着科技的飞速发展,源于对儿童口腔健康深入细致的关怀,以及对现代科技在日常生活用品中应用的不断追求,儿童电动音乐牙刷OTP芯片方案的诞生。 二:芯片简介 NV040C语音芯片是一款性能稳定、适合工厂量…...

Sentinel链路流控模式失效的解决方法
解决方法 1、在pom.xml中增加sentinel-web-servlet的依赖,我使用的版本是1.7.1 <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId> </dependency>2、在项目中添加一个FilterCon…...

Web应用安全测试-专项漏洞(一)
Web应用安全测试-专项漏洞(一) 专项漏洞部分注重测试方法论,每个专项仅列举一个例子。实际测试过程中,需视情况而定。 文章目录 Web应用安全测试-专项漏洞(一)Web组件(SSL/WebDAV)漏…...

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版
VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版 ESXi 8.0U2 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电)、Huawei (华为)、xFusion (超聚…...

python中的高阶函数介绍
在Python中,高阶函数是指那些可以接受函数作为参数或者返回函数作为结果的函数。这种特性使得函数式编程成为可能,并且可以编写出更加简洁和灵活的代码。以下是Python中一些常用的高阶函数: map() map() 函数接受一个函数和一个可迭代对象作为…...

华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)
华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…...

[开发|java] LocalDate转化为LocalDateTime
要将 java.time.LocalDate 转换为 java.time.LocalDateTime,你需要指定一天中的时间。因为 LocalDate 只包含日期部分(年、月、日),而 LocalDateTime 包含日期和时间(时、分、秒、纳秒),所以在转…...

介绍几种 MySQL 官方高可用方案
前言: MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。 1.MySQL Replication MySQL Replication 是官方提供的主从同…...

IMU坐标系与自定义坐标系转化
1.首先示例图为例: 虚线黑色角度为IMU的坐标系;实线为自定义坐标系; 矫正:(默认angleyaw为IMU采的数据角度) angleyaw_pt angleyaw-25;if(-180<angleyaw&&angleyaw<-155) // 角度跳变问…...

《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()
观前提示:函数完整代码在文末,本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法f105时钟树详解图 HAL_RCC_OscConfig() 函数介绍: 此函数是一个用于初始化RCC(Reset and Clock Control)振荡器(Osc…...

手动将jar包导入本地Maven仓库
1、进入存放jar包的目录,可以先放进仓库底下 2、cmd回车 3、执行命令,看到BUILD SUCCESS就是成功了 -DgroupId、-DartifactId、-Dversion、-Dfile记得换成自己对应的 mvn install:install-file -DgroupIdcom.github.03 -DartifactIdonvif -Dversion1.0…...

煤安防爆手机为什么能在煤矿井下使用
煤安防爆手机之所以能在煤矿井下使用,是因为它们经过特殊设计,符合严格的防爆安全标准,能够防止电火花引发爆炸,同时具备防尘防水、抗冲击等特性,确保在恶劣的煤矿环境中稳定可靠地运行,为工作人员提供安全…...

科普小课堂|不同版本USB接口详细解析
USB接口凭借其广泛的兼容性和高性能,已成为连接多样外设的主要接口,囊括了日常的键盘、鼠标等输入设备以及其他更多的领域。不仅如此,USB还展现了高度灵活性,能够便捷地转换为其他总线接口,例如实现USB到以太网或USB到…...

Spring Boot中的JSON解析优化
Spring Boot中的JSON解析优化 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用中如何优化JSON解析,以提升系统的性能…...

全彩屏负氧离子监测站
TH-FZ5在追求绿色生态、健康出行的今天,景区不仅仅是人们休闲游玩的好去处,更是人们体验大自然、感受清新空气的重要场所。为了进一步提升游客的游览体验,许多景区纷纷引入了全彩屏负氧离子监测站,这一创新举措不仅为景区增添了科…...

LeetCode 1207.独一无二的数
题目要求 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr [1,2,2,1,1,3] 输出:true 解释:在该…...

自然语言处理——英文文本预处理
高质量数据的重要性 数据的质量直接影响模型的性能和准确性。高质量的数据可以显著提升模型的学习效果,帮助模型更准确地识别模式、进行预测和决策。具体原因包括以下几点: 噪音减少:高质量的数据经过清理,减少了无关或错误信息…...

2024年二级建造师机电工程专业历年考试题库精选答案解析。
1.根据《标准施工招标文件》,关于施工合同变更权和变更程序的说法,正确的是()。 A.发包人可以直接向承包人发出变更意向书 B.承包人书面报告发包人后,可根据实际情况对工程进行变更 C.承包人根据合同约定࿰…...

Oracle 19C19.3 rac安装并RU升级到19.14
19C支持RU补丁安装。 下载好19.14的RU补丁 [rootrac1 soft]# ll total 9830404 -rw-r--r-- 1 grid oinstall 3059705302 Jun 18 15:26 LINUX.X64_193000_db_home.zip -rw-r--r-- 1 grid oinstall 2889184573 Jun 18 15:27 LINUX.X64_193000_grid_home.zip -rw-r--r-- 1 grid …...

1012:Joseph
网址如下: OpenJudge - 1012:Joseph 其中一个解法 只想到了一个快速找到下一位处决的人的方法,本质上还是遍历,暂时没想到更优的方法了 代码如下: #include<cstdio> int k;bool judge(int tt, int m, int r){if(tt k) …...

【高级篇】备份与恢复:守护数据的长城(十一)
引言 在上一章《性能优化》中,我们深入探讨了如何通过调整查询、优化索引和配置服务器参数等手段,提升MySQL的运行效率。然而,再高效的数据处理能力也无法抵御硬件故障、软件错误或人为失误带来的数据损失。因此,建立健全的备份与恢复机制是确保数据安全和业务连续性的关键…...

Docker构建多平台镜像
docker的多架构镜像构建 目前很多服务器都是基于arm架构的,而现在大多数的docker镜像都是基于x86架构的。一种情况就是同样的代码编译成业务包做成镜像需要部署在不同架构的服务器上,这个时候我们就可以使用docker的多平台构建了。 以下操作是在centos7.…...

群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)
介绍 石墨烯算法是一种新兴的优化算法,灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构,具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移,来求解复杂的优化问题 基本概念…...

创纪录!沃飞长空完成新一轮融资,实力获资方认可
作为全球竞逐的战略性新兴产业,今年首次写入政府工作报告的“低空经济”热度正持续提升,在政策、产业等多个层面均有重大突破。行业的飞速发展也吸引了投资界的目光,越来越多资本正投向低空经济。 近期,国内领先的低空出行企业吉…...

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP体检预约管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…...

如何优雅终止线程/线程池
如何优雅终止线程 分为两个阶段终止线程 1、interrupted(): 让线程从休眠状态转换到RUNNABLE 状态 2、线程终止的标志位:线程会在合适的时机检查这个标志位,如果发现符合终止条件,则自动退出 run() 方法 public class MonitorThread extends Thread {/…...

泰迪智能科技实验室产品-云计算资源管理平台介绍
云计算资源管理平台是一款集群应用程序管理平台,以Docker、Kubernetes为核心引擎的容器化应用部署、运行环境,对数据中心的物理服务器、网络、存储、虚拟服务器等基础架构资源进行集中统一的管理、分配、监控等。平台旨在围绕行业应用逐步由“虚拟化”向…...