ROS工程CMAKE设置写法

参考:https://www.cnblogs.com/gaoxiang12/p/4633316.html

Linux下的CMake项目通常由几个文件夹组成。例如我们今天讲的slam,你可以在机器上建一个叫slam的文件夹(注意:这个文件夹就是你代码的根目录了!)。然后往里面建几个子文件夹:
在这里插入图片描述

bin 用来放编译好的可执行二进制文件。
  src 用来放源代码。
  lib 用来放编译好的库文件。
  include 用来放头文件。

为什么要用这种目录结构呢?其实这是一种编译习惯,当然你可以把所有文件都搁一个目录里,但是这样看起来很乱不是么。通常我们把源代码和编译好的东西分开。如果源代码比较多,还会按模板分开。像opencv和pcl的代码就是由好多个模块组成的。

我们要把目录结构告诉cmake。所以我们在代码根目录下写一个CMakeLists.txt。cmake在生成代码时,会读这个文件,并按照它来编译你的代码。刚才我们对opencv进行编译时,也采用了这个步骤。好,现在在代码根目录下新建一个CMakeLists.txt:

touch CMakeLists.txt

写入:

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定版本
PROJECT( slam ) #设定工程名
SET( CMAKE_CXX_COMPILER "g++") #设定编译器
	
#设定可执行二进制文件的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 
	
#设定存放编译出来的库文件的目录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) 
#并且把该目录设为连接目录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
	
#设定头文件目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
	
#增加子文件夹,也就是进入源代码文件夹继续构建
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)

井号后面的是我的注释,只是为了帮助你理解,你可以不敲。通过这个文件,你应该了解了CMakeLists.txt的一些基本的用法。如果你想找一个系统的介绍,我们提供了《CMake实践》电子书,我认为是一个不错的参考资料。

小萝卜:等一下师兄!库文件和二进制都是什么啊!

师兄:二进制就是可以直接运行的程序啦,库文件呢,就是为这些二进制提供函数的啦。有main函数的代码可以编译成二进制,其他的则编译成库文件。链接时,把库文件链到二进制上,就可以运行啦。

小萝卜:师兄我还是不懂!

师兄:呃,那我们还是通过实例来做吧。在src/文件夹下新建一个main.cpp文件,输入:

#include <iostream>

int main(int argc, char**argv)
{
    
    
    std::cout<<"Hello SLAM!"<<std::endl;
    return 0;
}

在src/目录下新建一个CMakeLists.txt,输入:

# 增加一个可执行的二进制
ADD_EXECUTABLE( main main.cpp )

猜你喜欢

转载自blog.csdn.net/qq_21830903/article/details/121555524