源文件、函数、头文件、库文件、可执行文件、及CMake在其中的作用

0、CMake

CMake中,我们先输入cmake 命令对工程进行分析,生成makefile文件;

然后用make命令根据makefile内容编译整个工程。

1、可执行文件

含有mian函数的可以编译成可执行文件;增加可执行文件可以通过添加如下代码实现:

add_executable( 程序名 源代码文件)

2、库文件

没有main的函数,即无可执行函数。

add_library( 库名 库文件)    #静态库,生成后缀名为.so
add_library( 库名 SHARED 库文件)  #共享库,生成后缀名为.a

静态库每次调用都会生成一个副本,共享库只有一个副本。

3、包含头文件

当头文件不在当前目录时,CMake中添加头文件路径,在参数中把所有需要添加的路径,对应的函数叫include。

#指定头文件目录
include_directories( "/usr/include/eigen3" )
#注意:eigen库只有头文件,没有库文件,因此不需要添加库文件。然而其他大部分库是需要链接的。

4、头文件和库文件关系

[ 例子 ]

假如写了代码:main.cpp  func1.h  func1.cpp  func2.h  func2.cpp

cmake处理后:main.cpp->main.exe  func1.cpp->func1.a  func2.cpp->func2.a;两个头文件保留作为指引,将它们链接起来。

最终我们运行程序只需要:main.exe  func1.h  func1.a  func2.h  func2.a

由此可见,cmake实际上的作用是隐藏了源代码,并链接了可执行程序和库文件。

只要有头文件和库文件就可以调用库了,中间函数的cpp文件可以省略。

库文件通过头文件向外导出接口。用户通过头文件找到库文件中函数实现的代码从而把这段代码链接到用户程序中去。

5、CMakeLists.txt 结构

假如写了如下代码:

CMakeLists.txt  如下:

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project( HelloSLAM )

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

# 添加一个可执行程序
add_executable( helloSLAM helloSLAM.cpp )
# 添加一个可执行程序,同样含有main函数
add_executable( useHello useHello.cpp )

# 添加一个静态库
add_library( hello libHelloSLAM.cpp )
# 添加共享库
add_library( hello_shared SHARED libHelloSLAM.cpp )

# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )

运行结果如下:

源文件、函数、头文件、库文件、可执行文件、及CMake在其中的作用_第1张图片

 

参考:高翔《视觉SLAM十四讲》

你可能感兴趣的:(SLAM)