cmake_minimum_required(VERSION 3.0.2) project(test_pkg) ## Compile as C++11, supported in ROS Kinetic and newer # add_compile_options(-std=c++11) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) include_directories( include ${catkin_INCLUDE_DIRS} ) add_library(lserial include/my_serial_node/lserial.h src/lserial.cpp ) target_link_libraries(lserial ${catkin_LIBRARIES}) add_dependencies(lserial ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) add_executable(test_pkg src/my_serial_node.cpp) add_dependencies(my_serial_node test_msgs_gencpp) target_link_libraries(my_serial_node lserial ${catkin_LIBRARIES})
时间: 2025-07-31 21:58:04 浏览: 18
<think>我们正在配置一个ROSKinetic项目的CMakeLists.txt文件。需要包含以下要素:1.使用C++11编译选项2.声明并处理catkin依赖项3.链接自定义库根据引用[1]和[2],我们知道CMakeLists.txt文件用于定义构建规则,而`catkin_package`函数用于配置软件包,它会处理依赖项并生成必要的配置文件,以便其他软件包能够找到当前包。引用[3]提到,ROS在CMake基础上封装了catkin命令,自动生成的CMakeLists.txt已经配置了多数选项,我们只需稍作修改。引用[4]给出了创建ROS包的基本步骤,包括修改CMakeLists.txt和package.xml。具体步骤:1.在`CMakeLists.txt`中,首先声明CMake的最低版本和项目名称。2.使用`find_package`查找catkin和其他依赖包(如roscpp,rospy,std_msgs等),并指定这些依赖包为`REQUIRED`(如果必须)。3.启用C++11:可以通过设置`CMAKE_CXX_STANDARD`和`CMAKE_CXX_STANDARD_REQUIRED`来实现。4.调用`catkin_package`函数,声明本包导出的依赖项(`CATKIN_DEPENDS`)以及本包构建后需要被其他包依赖的库(`LIBRARIES`)和头文件(`INCLUDE_DIRS`)。5.设置包含目录:通常使用`include_directories`包含`${catkin_INCLUDE_DIRS}`,以及自定义的include目录。6.添加可执行文件:使用`add_executable`。7.指定可执行文件链接的库:使用`target_link_libraries`链接catkin库和自定义库。下面是一个示例配置:```cmake#声明CMake最低版本cmake_minimum_required(VERSION3.0.2)#项目名称project(your_project_name)#设置C++11标准set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STANDARD_REQUIREDON)#查找catkin和其他依赖包find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgs#其他依赖)#声明catkin包,导出依赖项、库和头文件catkin_package(CATKIN_DEPENDSroscpprospystd_msgsINCLUDE_DIRSincludeLIBRARIES${PROJECT_NAME}#如果生成库,则在这里指定库名,否则可以省略LIBRARIES)#设置包含目录include_directories(include${catkin_INCLUDE_DIRS})#如果你的项目有自定义库,先添加库add_library(${PROJECT_NAME}_libsrc/your_lib_source.cpp)#然后链接库到catkin库target_link_libraries(${PROJECT_NAME}_lib${catkin_LIBRARIES})#添加可执行文件add_executable(your_nodesrc/your_node_source.cpp)#链接可执行文件到自定义库和catkin库target_link_libraries(your_node${PROJECT_NAME}_lib${catkin_LIBRARIES})```注意:-如果项目不生成库,只是可执行文件,则不需要`add_library`,直接在可执行文件中链接`${catkin_LIBRARIES}`和可能有的自定义库(需要先通过`add_library`添加)。-自定义库需要先通过`add_library`定义,然后再通过`target_link_libraries`链接到catkin的库。另外,在`package.xml`中也需要声明依赖项:```xml<build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend><build_export_depend>roscpp</build_export_depend><build_export_depend>rospy</build_export_depend><build_export_depend>std_msgs</build_export_depend><exec_depend>roscpp</exec_depend><exec_depend>rospy</exec_depend><exec_depend>std_msgs</exec_depend>```以上配置应该能够满足ROSKinetic项目的基本需求。根据用户要求,生成相关问题:§§相关问题§§1.在CMakeLists.txt中如何添加非catkin的第三方库(如OpenCV)?2.如何配置CMakeLists.txt以同时构建多个可执行文件?3.ROS中的消息(msg)和服务(srv)在CMakeLists.txt中需要哪些特殊配置?4.如何设置安装规则(installrules)以便于`catkin_makeinstall`?</think>### 配置 ROS Kinetic 的 CMakeLists.txt 指南
以下是针对 ROS Kinetic 项目的完整 CMakeLists.txt 配置步骤,包含 C++11 支持、依赖项管理和库链接:
```cmake
cmake_minimum_required(VERSION 3.0.2)
project(your_project_name)
# 1. 设置C++11编译选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-std=c++11)
# 2. 查找catkin核心包和依赖项
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
# 添加其他依赖包,例如:
# sensor_msgs
# tf
)
# 3. 配置软件包元数据(关键步骤)
catkin_package(
INCLUDE_DIRS include # 导出头文件目录
LIBRARIES ${PROJECT_NAME}_lib # 导出自定义库
CATKIN_DEPENDS roscpp rospy std_msgs # 声明catkin依赖
# DEPENDS system_libs # 非catkin依赖项
)
# 4. 包含目录配置
include_directories(
include
${catkin_INCLUDE_DIRS} # 自动包含所有依赖项的头文件
)
# 5. 添加自定义库
add_library(${PROJECT_NAME}_lib
src/your_library.cpp
)
# 6. 链接库到catkin依赖
target_link_libraries(${PROJECT_NAME}_lib
${catkin_LIBRARIES} # 自动链接所有声明依赖
)
# 7. 添加可执行文件
add_executable(your_node src/main.cpp)
# 8. 链接可执行文件到自定义库
target_link_libraries(your_node
${PROJECT_NAME}_lib
${catkin_LIBRARIES}
)
# 9. 安装规则(可选)
install(TARGETS your_node
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(TARGETS ${PROJECT_NAME}_lib
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)
```
#### 关键配置说明:
1. **C++11 支持**:
- `set(CMAKE_CXX_STANDARD 11)` 强制使用 C++11 标准
- `add_compile_options(-std=c++11)` 确保编译器标志正确
2. **依赖项管理**:
- `find_package()` 声明所有 ROS 依赖包
- `catkin_package()` 自动处理依赖传递和路径导出[^2]
- CATKIN_DEPENDS 确保依赖包的头文件和库被正确包含
3. **自定义库链接**:
- 先通过 `add_library()` 创建库目标
- 使用 `target_link_libraries()` 链接 catkin 依赖
- 可执行文件链接自定义库时自动获得所有依赖
4. **路径处理**:
- `${catkin_INCLUDE_DIRS}` 包含所有依赖项的头文件路径
- `${catkin_LIBRARIES}` 包含所有依赖项的库文件路径
#### 必须同步修改的文件:
在 `package.xml` 中添加对应依赖:
```xml
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
```
> **重要提示**:执行 `catkin_make` 前务必删除 `build/` 和 `devel/` 目录以确保配置更新生效[^4]。
阅读全文
相关推荐


















