catkin_make 与cmake

2023-05-16

http://blog.csdn.net/zyh821351004/article/details/50388429

1.  catkin_make 与cmake的关系

    程序在cmake编译的流程: cmake指令依据你的CMakeLists.txt 文件,生成makefiles文件,make再依据此makefiles文件编译链接生成可执行文件.

catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径.

1)  cmake标准流程


 $ mkdir build  
$ cd build  
$ cmake ..  
$ make  
$ make install  # (可选)    

2) catkin_make 的流程


# In a catkin workspace  
$ catkin_make $ catkin_make install # (可选)

如果源码不在默认工作空间,需要指定编译路径:  
  
# In a catkin workspace  
$ catkin_make --source my_src  
$ catkin_make install --source my_src  # (optionally)   

 

2. catkin_make

1) catkin_make默认的路径信息


catkin_make运行后终端输出文件部分解析  
  
#基本路径  
Base path: /home/user/catkin_ws  
Source space: /home/user/catkin_ws/src   
Build space: /home/user/catkin_ws/build  
Devel space: /home/user/catkin_ws/devel  
Install space: /home/user/catkin_ws/install  
  
  
#catkin_make 封装运行中cmake运行的情况  
Running command: "cmake /home/user/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/user/catkin_ws/devel   
-DCMAKE_INSTALL_PREFIX=/home/user/catkin_ws/install" in "/home/user/catkin_ws/build"    
  
#编译工具查找  
-- Using CATKIN_DEVEL_PREFIX: /tmp/catkin_ws/devel  
-- Using CMAKE_PREFIX_PATH: /opt/ros/groovy  
-- This workspace overlays: /opt/ros/groovy  
  
#编译的包  
<pre name="code" class="cpp">#catkin_make 封装运行中make运行的情况  

#### Running command: "make -j4" in "/home/user/catkin_ws/build"

2)  layout :ros工作空间文件系统结构


    workspace_folder/        --WORKSPACE  工作空间
      src/                   --SOURCE SPACE  源空间
        CMakeLists.txt/      --This is symlinked to catkin/cmake/toplevel.cmake  
        package_1/  
          CMakeLists.txt  
          package.xml  
        ...  
        package_n/  
          CMakeLists.txt  
          package.xml  
      build/                 --BUILD SPACE 编译空间 (this is where build system is invoked, not necessarily within workspace)  
        CATKIN_IGNORE        --Marking the folder to be ignored when crawling for packages (necessary when source   
                                space is in the root of the workspace, the file is emtpy)  
                                #此选项可用于忽略某个包编译  
     devel/                 --DEVEL SPACE 开发空间(targets go here, parameterizable, but defaults to peer of Build Space)  
                               # 生成二值 库 可执行文件   
        bin/  
        etc/  
        /include/  
        lib/  
        share/  
        .catkin              --Marking the folder as a development space (the file contains a semicolon separated list of Source space paths)  
                                #  
        env.bash  
        setup.bash  
        setup.sh  
        ...  
      install/               --INSTALL SPACE 安装空间[-DCMAKE_INSTALL_PREFIX=/any/directorycmake默认是/usr/local](this is where installed targets for test installations go, not necessarily within workspace)  
        bin/  
        etc/  
        include/  
        lib/  
        share/  
        .catkin              --Marking the folder as an install space (the file is emtpy)  
        env.bash  
        setup.bash    -- Environment setup file for Bash shell  
        setup.sh      -- Environment setup file for Bourne shell   
        ...  
      
      
    /  系统安装空间         /opt/ros/ROSDISTRO
      opt/  
        ros/  
          groovy/  
            setup.bash -- Environment setup file for Bash shell  
            setup.sh   -- Environment setup file for Bourne shell  
            setup.zsh  -- Environment setup file for zshell  
            ...  

结果空间    source RESULT-SPACE/setup.sh     类似扫描安装空间与开发空间,替换系统通用下的对应文件.

总结:


src/                   --SOURCE SPACE  源空间
build/ --BUILD SPACE 编译空间
devel/ --DEVEL SPACE 开发空间
install/ --INSTALL SPACE 安装空间
ROS系统安装空间         /opt/ros/indigo

 

3) Overlays

catkin支持包的逐层覆盖, 当前最高,其它依据source的顺序逐层变高, 高层可覆盖低层. 


    Example 4: Overlaying workspace 3 on top of local workspace2 install space on top of workspace1 devel space on top of system install  
      
    cd ~/workspace2/build  
    cmake -DCMAKE_INSTALL_PREFIX=~/ws2_installed ../src  
    make  
    make install  
      
    source ~/ws2_installed/setup.bash  
      
    cd ~/workspace3/build  
    cmake ../src  
    make    

 

ros 环境变量设置 可以参考 .bashrc文件


 #  slam_ws
source /opt/ros/indigo/setup.bash source /home/yhzhao/slam_ws/devel/setup.bash export ROS_PACKAGE_PATH=~/slam_ws/src:$ROS_PACKAGE_PATH export ROS_WORKSPACE=~/slam_ws/src

4)  catkin_make编译指定的包

$ catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2"

恢复编译所有的包

$ catkin_make -DCATKIN_WHITELIST_PACKAGES=""

 

3. 对这句命令进行解释:


catkin build rovio --cmake-args -DCMAKE_BUILD_TYPE=Release -DMAKE_SCENE=ON  

catkin build – Build Packages,编译rovio包

如果工作空间未初始化,可以自动完成工作空间初始化 (source ~/catkin_ws/devel/setup.bash)
It is used to build one or more packages in a catkin workspace. If a workspace is not yet initialized(初始化), build can initialize it with the default configuration(默认配置), but only if it is called from the workspace root. Specific workspaces can also be built from arbitrary working directories with the --workspace option.


--cmake-args    #cmake参数
-DCMAKE_BUILD_TYPE=Release

使用 CMake我们可以生成 debug 版和 release 版的程序。debug 版的项目生成的可执行文件需要有调试信息并且不需要进行优化,而 release 版的不需要调试信息但需要优化。这些特性在 gcc/g++ 中是通过编译时的参数来决定的,如果将优化程度调到最高需要设置参数-O3,最低是 -O0 即不做优化;添加调试信息的参数是 -g -ggdb ,如果不添加这个参数,调试信息就不会被包含在生成的二进制文件中。

CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug、 Release、 RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile ,当这个变量值为 Release 的时候,工程会使用变量 CMAKE_CXX_FLAGS_RELEASE 和 CMAKE_C_FLAGS_RELEASE 选项生成 Makefile。

现假设项目中只有一个文件 main.cpp ,下面是一个可以选择生成 debug 版和 release 版的程序的 CMakeList.txt :


 PROJECT(main)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
 SET(CMAKE_SOURCE_DIR .) 
 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")   
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
AUX_SOURCE_DIRECTORY(. DIR_SRCS) ADD_EXECUTABLE(main ${DIR_SRCS})

 

转载于:https://www.cnblogs.com/Jessica-jie/p/6706513.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

catkin_make 与cmake 的相关文章

随机推荐

  • apt-get命令详解

    apt 1 2 32ubuntu0 2 amd64 用法 xff1a apt get 选项 命令 apt get 选项 install remove 软件包1 软件包2 apt get 选项 source 软件包1 软件包2 apt get
  • 如何使用 datax 拉取 hive 中的数据到 oracle 中?

    需求 将 hive 中的数据拉取到 oracle 中 xff0c 使用的工具是 datax 步骤 1 先在 hive 中找一张需要拉取的表 xff0c 然后在 oracle 中创建对应的空表 xff0c 等待拉取数据 2 在 datax 的
  • Docker教程(3)——实例1

    Docker教程 xff08 3 xff09 运行一个web应用程序 在后文中将在docker容器中运行一个Python Flask应用运行一个web应用 文章目录 Docker教程 xff08 3 xff09 运行一个web应用程序1 载
  • 平衡车代码阅读,学习mpu6050滤波

    mpu6050 c include 34 MPU6050 h 34 include 34 IOI2C h 34 include 34 usart h 34 作者 xff1a 平衡小车之家 我的淘宝小店 xff1a http shop1144
  • 【慕伏白教程】在Vmware中安装Ubuntu流程

    慕伏白教程 在Vmware中安装Ubuntu流程 一 下载官方镜像二 新建虚拟机1 创建虚拟机2 安装系统镜像2 1 点击 编辑虚拟机设置 2 1 虚拟机设置 三 安装系统1 系统初始化1 1 点击 开启此虚拟机 1 2 选择 Try or
  • 《自动化学报》投稿成长日记

    自动化学报 投稿成长日记
  • openwrt 7621 使能ttyS1

    openwrt版本 15 05 release 1 修改openwrt 15 05 release target linux ramips dts下对应的dts文件 xff0c 取消uart2 uart3配置为gpio功能 将uart2 u
  • 安装ROS过程中的rosdep init 和 rosdep update 命令执行不成功的解决办法

    一 解决 rosdep init 命令执行不成功 xff1a 不成功信息 xff1a RROR cannot download default sources list from https raw githubusercontent co
  • STM32F1 定时器 PWM输入捕获两路

    IO u32 TIM4CH3 CAPTURE UPVAL 61 0 通道3捕获到高电平的时刻 IO u32 TIM4CH3 CAPTURE DOWNVAL 61 0 通道3捕获到低电平的时刻 IO u32 TIM4CH4 CAPTURE U
  • openwrt 使用uci更改ip

    以lan口举例 xff1a 设置lan口ip uci set network lan ipaddr 61 192 168 0 251 提交 uci commit network 重启网络 etc init d network restart
  • STM32F103 USART1串口重映射功能的实现

    STM32F103 USART1串口重映射实现方法代码 转载请注明出处 xff1a https blog csdn net qq 43400642 article details 84838405 我们知道 xff0c F103的usart
  • FreeRTOS api库函数之Message Buffers(消息缓冲区)

    xMessageBufferCreate xff08 xff09 MessageBufferHandle t xMessageBufferCreate xff08 size t xBufferSizeBytes xff09 使用动态分配的内
  • C/C++经典程序之打印三角形

    等腰直角三角形 xff08 直角边在左下 xff09 include lt stdio h gt int main int i j int line printf 34 请输入行数 xff1a 34 scanf 34 d 34 amp li
  • STM32F4 DMA

    STM32F4有2个DMA xff0c 每个DMA控制器有8个数据流 xff0c 每个数据流有多达8个通道 xff0c 但是DMA1 控制器 AHB 外设端口与 DMA2 控制器的情况不同 xff0c 不连接到总线矩阵 xff0c 因此 x
  • STM32粗略延时,大致精确

    考虑到一些情况下 xff0c 无法使用系统定时或者定时器 xff0c 而进行的时间计算 STM32F1系列 xff0c 对于72Mhz来说 void my delay ms u32 ms 对于stm32f1系列 72mhz大致是1ms u1
  • linux下的串口配置

    经过验证是准确无误的 xff0c 配置以后可以通过以下指令查看 stty F dev ttyUSB0 a 查看 dev ttyUSB0的串口配置 stty F dev ttyUSB0 ispeed 115200 ospeed 115200
  • Leetcode 42 接雨水

    Leetcode42接雨水 题解1 xff1a 正反两扫 xff08 Simple and effect xff09 题解2 xff1a DP题解3 xff1a 单调栈 xff08 单调栈存储的是下标 xff0c 满足从栈底到栈顶的下标对应
  • 错误 Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build*

    安装Roboware Studio后 xff0c 为了支持Python调试功能 xff0c 需要先安装pylint 使用sudo python m pip install pylint命令产生报错 xff1a Command python
  • imu可视化和frame_id的查询

    得到imu的frame id rostopic echo topic grep frame id 得到imu的可视化 xff1a 下载源代码 xff1a 链接 https github com ccny ros pkg imu tools
  • catkin_make 与cmake

    http blog csdn net zyh821351004 article details 50388429 1 catkin make 与cmake的关系 程序在cmake编译的流程 xff1a cmake指令依据你的CMakeLis