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_executable
RUNTIME 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_pub
RUNTIME 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 命令。






![[问题记录]Qt QGraphicsItem 移动时出现残影](https://img-blog.csdnimg.cn/direct/ec04162f14e34ac48f9dd191f6293d20.png)











