尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ROS/ROS2 CMakeLists.txt 入门教程

ROS/ROS2 CMakeLists.txt 入门教程 一、前言笔者当时在学写ros1的时候对于cmakelist.txt是一知半解当时没有主动的去学习它笔者在学ros2的时候才开始学习cmake。二、Linux C 基础编译ROS/ROS2 所有功能包的编译核心均依赖 CMake、CMakeLists.txt底层依托 Linux 原生的 g 编译器、make、Makefile 工具链。2.1、单文件手动编译Linux原生使用g编译C源码无工程配置时直接命令编译# 编译单个cpp文件生成可执行文件main gmain.cpp-o main # 运行程序Linux必须加././main-o参数含义:-o是output的缩写属于g编译器核心参数作用是手动指定编译输出的可执行文件名。2.2、最简通用 CMakeLists.txtcmake_minimum_required(VERSION 3.10) # CMake最低版本 project(demo) # 项目名称 add_executable(main main.cpp) # 第一个是可执行文件名第二个是可执行文件所依赖的代码文件cmake . # . 代表是当前目录会发现多了几个文件 make # 对当前文件进行编译会发现多了一个main文件 ./main # 运行当前目录下名为 main 的可执行文件2.3、多个.h/.cpp文件写法一cmake_minimum_required(VERSION 3.10) project(project2) add_executable(main2 main.cpp test1.cpp test2.cpp)写法二cmake_minimum_required(VERSION 3.10) project(project2) # 将当前目录.的所有源码文件保存到SRC_LIST这个变量中 aux_source_directory(. SRC_LIST) add_executable(main2 ${SRC_LIST})cmake . # . 代表是当前目录会发现多了几个文件 make # 对当前文件进行编译会发现多了一个main文件 ./main # 运行当前目录下名为 main 的可执行文件2.4、ROS标准的写法在ros/ros2中或者其他开发环境中一般src下放.cpp文件include下放.h头文件文件。camke . 之后会生成很多别的文件例如CmakeCache.tex,Makefile,cmake_install.cmake我们建立一个build文件夹专门来存放这些文件mkdirbuild重新写一个cmakelists.txtcmake_minimum_required(VERSION 3.10 project(project3) # 将源码文件.cpp的目录保存在SRC_LIST变量 aux_source_directory(src SRC_LIST) # 指定头文件路径 include_directories(include) add_executable(main3 ${SRC_LIST})cdbuild cmake..#此时多了一个Makefilemake这里需要注意了这里引入install~make只在 build 目录生成可执行文件只能在 build 本地跑ROS 识别不到不能全局调用别的包也依赖不了。make install把程序、库、配置复制到 install 目录完成 ROS 环境注册支持全局调用、跨包依赖是 ROS/ROS2 工程必不可少的一步。catkin_make、colcon build底层会自动跑 make make install。手写 CMakeLists 必须写 install 规则不然编译成功功能包也用不了。普通单文件 C 程序不需要 install但 ROS 多包协作必须配置。cmake_minimum_required(VERSION 3.10 project(project3) #将源码文件.cpp的目录保存在SRC_LIST变量 aux_source_directory(src SRC_LIST) #指定头文件路径 include_directories(include) add_executable(main3 ${SRC_LIST}) install(TARGETS main RUNTIME DESTINATION ${PROJECT_NAME} )我们平时用的 catkin_make / colcon build底层自动执行了 make make install所以不用手动敲cdbuild cmake..#此时多了一个Makefilemakemakeinstall三、总结笔者能力有限如有错误感谢指出仅作为辅助学习。
返回列表