在cmake工程中,根据CMakeLists文件内容,组织源文件和库文件,用cmake命令生成makefile文件,然后用make命令根据makefile文件得内容编译整个过程。
当提供了库文件和对应的头文件才可以调用该库。 在Linux中,库文件分为静态库(以.a为后缀名)和共享库(以.so为后缀名),两者区别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本。 库文件是压缩包,含有编译好的二进制文件,我们并不知道里面到底是什么,所以需要提供头文件,说明库里有什么。
库文件中是没有main 函数的
//libHelloSLAM.cpp #inculde<iostream> using namespace; void printhello() { cout<<"hello SLAM"<<endl; } 头文件更多的是定义变量,声明函数;库文件更多的是函数的定义实现 头文件 //libHelloSLAM.h #ifndef LIBHELLOSLAM_H_//防止重复定义 #define LIBHELLOSLAM_H_ void printHello(); #endif //添加可执行程序的生成命令,链接到生成的库 add_executable(useHello useHello.cpp) //添加可执行文件,语法:add_executable(程序名 源代码文件) target_link_libraries(useHello hello_shared) //将程序链接到库文件,语法:target_link_libraries(程序名 库名) ADD_LIBRARY基本语法: ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN) //libname是编译后的库文件名称 中间是选择共享/静态库文件 source1 source2等是编译成库文件的源代码 //EXCLUDE_FROM_ALL 参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手工构建参考高翔------视觉slam14讲 https://cmake.org/cmake/help/latest/guide/tutorial/index.html