CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

code review!

文章目录

1.CMAKE_INSTALL_PREFIX详解

CMAKE_INSTALL_PREFIX 是 CMake 中的一个重要变量,它定义了安装路径的前缀,决定了项目安装目录的根位置。理解和正确使用 CMAKE_INSTALL_PREFIX 对于控制软件包的安装位置非常重要,特别是在多项目构建和部署环境中。

变量作用

CMAKE_INSTALL_PREFIX 决定了 make installcmake --install 命令将项目文件安装到哪个根目录。默认情况下,它的值通常是 /usr/local,但可以根据需要进行修改。

设置 CMAKE_INSTALL_PREFIX

可以在运行 cmake 命令时通过命令行参数设置 CMAKE_INSTALL_PREFIX,例如:

sh 复制代码
cmake -DCMAKE_INSTALL_PREFIX=/desired/install/path ..

或者在 CMakeLists.txt 中设置:

cmake 复制代码
set(CMAKE_INSTALL_PREFIX "/desired/install/path" CACHE PATH "Install path prefix")

示例

假设有一个简单的 CMake 项目:

cmake 复制代码
cmake_minimum_required(VERSION 3.0)
project(MyProject)

add_executable(my_executable main.cpp)

install(TARGETS my_executable
        RUNTIME DESTINATION bin)

如果运行以下命令:

sh 复制代码
cmake -DCMAKE_INSTALL_PREFIX=/home/user/myproject_install ..
make
make install

那么 my_executable 会被安装到 /home/user/myproject_install/bin 目录中。

影响范围

CMAKE_INSTALL_PREFIX 影响所有相对路径的安装目标。例如,以下 CMake 语句:

cmake 复制代码
install(TARGETS my_executable RUNTIME DESTINATION bin)

结合 CMAKE_INSTALL_PREFIX,会将 my_executable 安装到 ${CMAKE_INSTALL_PREFIX}/bin 目录。

常见用法

  1. 默认安装路径:

    • 默认值是 /usr/local,适合系统全局安装。
  2. 用户本地安装:

    • 对于没有管理员权限的用户,可以将安装路径设为用户的主目录,例如 ~/myproject_install
    sh 复制代码
    cmake -DCMAKE_INSTALL_PREFIX=~/myproject_install ..
  3. 自定义目录:

    • 在构建环境中,可能需要将不同项目安装到特定目录中以避免冲突。
    sh 复制代码
    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

使用

cmake 复制代码
install(TARGETS ros_templete_pub
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

在 ROS(机器人操作系统)中,使用 Catkin 构建系统时,构建过程中生成的文件通常会放置在 devel 目录中。这是因为 Catkin 使用了两个主要的构建空间:develinstall。下面解释为什么会在 devel/lib/ros_templete_pub/ros_templete_pub 找到可执行文件。

构建目录结构

  • devel 目录 :
    • 该目录是开发空间(development space),在这里构建的文件可以直接使用而无需安装。
    • 运行 catkin_makecatkin build 时,生成的可执行文件和其他构建产物会放置在 devel 目录下。
    • devel/lib 目录通常包含构建生成的可执行文件,因为在 ROS 中,lib 目录不仅用于库文件,也用于存放节点的可执行文件。

安装目录结构

  • install 目录 :
    • 该目录是安装空间(install space),通过执行 catkin_make installcatkin build --install 生成的文件会被安装到这里。
    • install 目录中的结构由 CMake install 命令决定,例如 install(TARGETS ...) 语句。

流程解释

  1. 构建阶段:

    • 当运行 catkin_makecatkin build 时,CMake 会在 devel 目录中生成所有构建产物。
    • 可执行文件通常会放置在 devel/lib/<package_name>/ 目录中。因此,会在 devel/lib/ros_templete_pub/ros_templete_pub 找到的可执行文件。
  2. 安装阶段:

    • 如果运行 catkin_make installcatkin 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 installcatkin build --install,并确保在的 CMakeLists.txt 中正确配置了 install 命令。

相关推荐
ajsbxi10 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
TeYiToKu31 分钟前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws34 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
乌恩大侠2 小时前
5G周边知识笔记
笔记·5g
咔叽布吉4 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny2334 小时前
《大模型应用开发极简入门》笔记
笔记·chatgpt
亦枫Leonlew4 小时前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象4 小时前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节
星LZX4 小时前
WireShark入门学习笔记
笔记·学习·wireshark