在Linux下运用ROS系统可免去很多构建框架的步骤,所以一般只要按照官网给的教程逐步进行即可。但是ROS自身有许多的毛病,比如其稳定性和实时性差,有时候数据传输会发现丢失的现象,因此其性能不如一般的C++编写的框架好。所以本人经常会先采用ROS系统实现基本功能,然后再采用去ROS的步骤构建非ROS系统。而构建一般的C++系统需要对CMakeLists.txt文件进行合理的编写,在这里只介绍CMakeLists.txt文件中的部分指令实现简单C++程序的编译(其实CMakeLists.txt文件的编写方式与ROS的相同)。
一般来说编译单个C++源文件只需要采用g++指令即可,但是一般工程都是包含几个,几十个乃至几百个源文件。此时,如果用g++指令一个一个去编译就会非常麻烦。所以Linux采用了make指令来根据makefile中的相关规则编译所有的源文件。关于g++、make、cmake和CMakeList.txt之间的关系,我的另外一篇笔记有粗略的记载,有兴趣可以看看:
http://blog.csdn.net/bigdog_1027/article/details/79073194
创建C++工程目录
首先就是需要给C++工程创建一个目录以便管理,具体方法如下:
(1)打开Linux(我默认是Ubuntu)的终端,进入要创建C++工程的目录。
(2)采用mkdir指令创建C++工程目录,名字可以根据自己需要取。
$ mkdir hello_world |
$ cd hello_world $ mkdir bin $ mkdir lib $ mkdir src $ mkdir include $ mkdir build $ touch CMakeLists.txt |
(4)进入src目录下,新建源文件。
$ cd src $ touch main.cpp $ touch hello_world.cpp |
$ cd ../include/ $ touch hello_world.h |
(7)然后就是比较重要的一块,即编写CMakeLists.txt文件。在这里,我只记录了基本的使用,一些更加复杂的编写方式以后遇到再补充。一般开头都是给出要求cmake最低版本以及工程名称,如下:
cmake_minimum_required(VERSION 2.8) project(hello_world) |
SET(CMAKE_BUILD_TYPE Release) |
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) |
include_directories( ${PROJECT_SOURCE_DIR}/include ) |
add_executable(hello_world src/hello_world.cpp src/main.cpp) |
(8)CMakeLists.txt文件编写结束以后就可以对工程进行编译了,进入build目录。并执行cmake和make指令,如下:
$ cd build $ cmake .. $ make |
(9)编译通过以后就会在对应的bin文件夹中生成可执行文件,打开bin文件夹可以看到。
(10)在终端下进入bin目录,运行该可执行文件可得到如下结果: