CMakeLists.txt
简介
- CMakeLists.txt文件是CMake编译系统编译软件包过程的输入文件
- 任何CMake兼容包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何编译代码以及将其安装到哪里
- 用于 catkin 项目的 CMakeLists.txt 文件是一个标准的 vanilla CMakeLists.txt 文件,带有一些额外的约束
整体结构和顺序
cmake_minimum_required
:设置CMake最低版本
project()
:功能包名称
find_package()
:查找编译依赖的其他CMake/Catkin包(声明依赖库)
catkin_python_setup()
:启动Python模块支持
add_message_files(), add_service_files(), add_action_files()
:消息/服务/操作 (Message/Service/Action) 生成
generate_messages()
:调用消息/服务/操作生成
catkin_package()
:指定包编译信息导出
add_library()/add_executable()/target_link_libraries()
:添加要编译的库和可执行文件
catkin_add_gtest()
:测试编译
install()
:安装规则
解析
| cmake_minimum_required(VERSION 3.10) |
| set(CMAKE_CXX_STANDARD 14) |
| set(CMAKE_CXX_STANDARD_REQUIRED TRUE) |
- 为当前目录及以下目录的源代码向编译器命令行添加标志(flag)
| add_definitions(-Wall -Werror) |
| |
- 指定编译软件包所需的包(必须在package.xml中列出)
| find_package(catkin REQUIRED COMPONENTS |
| roscpp |
| sensor_msgs |
| ) |
| add_message_files( |
| FILES |
| MyMessage1.msg |
| MyMessage2.msg |
| ) |
| add_service_files( |
| FILES |
| MyService.srv |
| ) |
| add_action_files( |
| FILES |
| DoDishes.action |
| ) |
- 生成不同语言版本的msg/srv/action接口
| generate_messages( |
| DEPENDENCIES |
| std_msgs |
| std_srvs |
| actionlib_msgs |
| ) |
| catkin_package( |
| INCLUDE_DIRS include |
| |
| CATKIN_DEPENDS roscpp sensor_msgs |
| |
| ) |
| |
| include_directories( |
| include |
| ${catkin_INCLUDE_DIRS} |
| |
| ${EIGEN3_INCLUDE_DIR} |
| |
| ${Boost_INCLUDE_DIRS} |
| ) |
- 指定用于编译的库文件,默认情况下,catkin编译共享库
| add_library(libanswer STATIC OtherFile.cpp) |
| |
| |
| add_executable(${PROJECT_NAME} main.cpp OtherFile.cpp) |
| target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) |
| add_dependencies(${PROJECT_NAME} libanswer) |
| |
| |
| |
| |
| |
| install( |
| TARGETS ${PROJECT_NAME} |
| ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} |
| LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} |
| RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} |
| ) |
| |
| |
| |
| |
| |
| |
| install( |
| DIRECTORY include/${PROJECT_NAME}/ |
| DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} |
| FILES_MATCHING PATTERN "*.h" |
| ) |
| |
| |
| |
| install( |
| DIRECTORY config launch |
| DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} |
| ) |
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现