程序代码是由头文件和源文件组成。
带有main函数的源文件编译成可执行程序,其它的编译成库文件。
一个库往往是许多算法程序的集合。在Linux中,库文件分成静态库和共享库两种。静态库以.a
作为后缀名,共享库以.so
结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用时都会生成一个副本,而共享库只有一个副本,更节省空间。
生成静态库的cmake
命令:
1 | # 添加一个库,hello是库名,libHello.cpp是源文件。 |
这行命令会生成一个libhello.a
文件。
生成动态库的cmake
命令:
1 | # 添加一个共享库,SHARED表示“共享”,hello_shared是库名,libHello.cpp是源文件。 |
这行命令会生成libhello_shared.so
文件。
库文件是一个压缩包,里面有编译好的二进制函数。但是,如果仅有.a
和.so
文件,我们并不知道里面的函数是什么,调用的形式又是怎么样的,为了使用这个库,我们需要提供一个头文件。
因此,对于库的使用者来说,只要拿到了头文件和库文件,就可以调用这个库。如果可执行程序想调用库文件中的函数,则它需要参考该库提供的头文件(即在源.cpp
文件中#include <库的头文件>
),以明白调用的格式。同时,要把可执行程序链接到库文件上。
相关的cmake
命令如下:
1 | # 使用useHello.cpp源文件生成可执行文件useHello |
CMakeLists.txt
文件用于告诉cmake
在这个目录下做什么事情。CMakeList.txt
文件的内容需要遵守cmake
的语法。
1 | # 声明要求最低的cmake版本 |