程序代码是由头文件和源文件组成。
带有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版本 |