1 整体结构
CMakeList.txt文件必须遵循以下的格式:
所需的CMake版本(cmake_minimum_required)
软件包的名称(project())
查找构建所需要的其他CMake/Catkin软件包(find_package())
消息/服务/运动生成器(add_message_files() add_service_files() add_action_files())
调用消息/服务/动作生成(generate_message())
制定package build info export(catkin_package())
需要建立的库/可执行文件(add_library() add_executable() target_link_libraries())
安装规则(install())
1.1 CMake版本
每个catkin CMakeList.txt文件都必须以需要的CMake版本。
cmake_minimum_required(VERSION 2.8.3)
1.2 软件包名称
由CMake项目功能指定的包的名称。这里我们制作一个名为robot_brain的软件包。
project(robot_brain)
1.3 查找相关的CMake包
我们需要使用find_package函数来制定需要找到哪些其他的CMake包来构建我们的项目
find_package(catkin REQUIRED)
对于find_package来说,有两种不同的表达方式分别为:
find_package(catkin REQUIRE COMPONENTS nodelet)
或者
find_package(catkin REQUIRE)
find_package(nodelet REQUIRE)
对于两者的区别。如果通过了find_package找到了一个包,会创建几个提供有关找到的包的消息的Cmake环境变量。
这些环境变量导出了头文件的位置,源文件的位置,包所依赖的库以及这些库的地址。
<NAME>_FOUND-如果找到库,则设置为true,否则为false
<NAME>_INCLUDE_DIR/_INCLUDE-包导出的路径
<NAME>_LIBRARIES/_LIBS-包导出的库
如果find_package作为catkin的组件(例如第一种方式),这是有好处的。
find_package(catkin REQUIRE COMPONENTS nodelet)
这意味着由nodelet导出的include路径,库等也附加到了catkin_变量,这里的变量是上面指示的<NAME>_,反之使用方式二,则路径,库等不会被添加到catkin_变量中。
1.4 Boost
如果想使用Boost,并制定用作组件的Boost的哪些方面,如你想要使用Boost线程,则
find_package(Boost REQUIRE COMPONENTS thread)
1.5 catkin_package()
catkin_package()是一个catkin提供的CMake宏。这是为构建系统指定catkin特定消息所必须的。后者又用于生成pkg_config和CMake文件。
在使用add_library()或者add_executable()声明任何目标之前,必须调用此函数
举例:
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp nodelet
DEPENDS eigen opencv)
这表示,包文件夹中的文件夹"include"是导出标题的地方。CMake环境变量${PROJECT_NAME}评估到之前传给pro

最低0.47元/天 解锁文章
1733

被折叠的 条评论
为什么被折叠?



