http://blog.csdn.net/u013243710/article/details/35795841
http://wiki.ros.org/catkin/CMakeLists.txt
文件CMakeLists.txt是用于构建软件包的CMake构建系统的输入。任何符合cmake的包都包含一个或多个CMakeLists。txt文件描述如何构建代码并将其安装到何处。
结构和机制
1. Required CMake Version(cmake_minimum_required)
cmake_minimum_required(VERSION 2.8.3) //catkin必须是2.8.3,或以上版本
2. Package Name (project())
project(robot_brain) //project作用 // 在CMake中,您可以在任何需要的地方使用变量${PROJECT_NAME}在CMake脚本的任何地方引用项目名称。
3. Find other CMake/Catkinpackages needed for build (find_package())
find_package(catkin REQUIRED) //:我们需要指定使用CMakefind_package函数来构建我们的项目所需的其他CMake包。至少有一个: //如果您的项目依赖于其他的包,它们将自动转换成catkin的组件(在CMake中)。如果您将其指定为组件,而不是在这些包上使用find_package,它将使活更轻松。例如,如果您使用package nodelet:find_package(catkin REQUIRED COMPONENTS nodelet)
4. Enable Python module support(catkin_python_setup())
5. Message/Service/ActionGenerators (add_message_files(), add_service_files(), add_action_files())
6. Invoke message/service/actiongeneration (generate_messages())
7. Specify package build infoexport (catkin_package())
8. Libraries/Executables to build(add_library()/add_executable()/target_link_libraries())
9. Tests to build(catkin_add_gtest())
10. Install rules (install())
find_package()的工作机制
一个包被find_package,那么就会导致一些CMake变量的产生,从而去找到这个包,这些变量后面将在CMake的脚本中用到,这些变量描述了所依赖的包输出的头文件、源文件、库文件在哪里。和包所依赖的库,
这些变量的名字依照的惯例是<PACKAGENAME>_<PROPERTY>,比如:
<NAME>_FOUND:这个变量说明这个库是否被找到,如果找到就被设置为true,否则设为false;
<NAME>_INCLUDE_DIRSor<NAME>_INCLUDES:这个包输出的头文件目录;
<NAME>_LIBRARIES or <NAME>_LIBS:这个包输出的库文件。
需要的所有