在一个 cmake 工程中,我们会用 cmake 命令生成一个 makefile 文件,然后,用 make命令,根据这个 makefile 文件的内容,即CMakeLists.txt 编译整个工程。
其中,带有 main 函数的文件才会生成可执行程序;而另一些代码,我们只想把它们打包成一个东西,供其他程序调用。这个东西叫做库。在 Linux 中,库文件分成静态库和共享库两种‹。静态库以.a 作为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。在下面的测试示例中,就提供了三种可执行文件的生成方式:
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个 cmake 工程
project( HelloSLAM )
# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( helloSLAM helloSLAM.cpp )
# 生成一个静态库
add_library( hello libHelloSLAM.cpp )
# 生成一个共享库
add_library( hello_shared SHARED libHelloSLAM.cpp )
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( useHello useHello.cpp )
# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )
# 添加