CMake生成并使用库函数

在一个C++工程中,并不是所有的代码都会编译成可执行文件,只有带main函数的文件才会生成可执行程序,而另一些代码,我们只想想把它打包成一个东西,供其他程序调用,这个东西叫做库(LIbrary)

一个库往往是许多算法,程序的集合,我们在学习过程中会接触到很多库,因此,我们要学习如何使用cmake生成库,并且使用库中的函数,以hello world为例,步骤如下:

  • 创建一个libhello.cpp的源文件

/slam/ch2/libhello.cpp

#include
using namespace std;
void printhello()
{
    cout<<"hello xyb"<

该库提供了一个printhello函数,调用该函数将输出一条信息,但是它没有main函数,这意味着这个库没有可执行文件,我们在CMakeLists.txt

/slam/ch2/CMakeLists.txt

#将b.cpp文件编译成一个叫b的库 add_library(b b.cpp)  build文件里的.a文件就是我们得到的库
add_library(hello libhello.cpp)

这条命令告诉cmake,我们想把这个文件编译成一个叫做hello的库,然后,使用cmake编译整个工程

cd build
cmake ..
make

这时,在build文件夹下面就会生成一个libhello.a的文件,这就是我们创建的静态库
CMake生成并使用库函数_第1张图片
库文件是一个压缩包,里面有编好的二进制函数,如果仅有.a等库文件,那么我们并不知道里面的函数及其调用形式是什么,为了更方的使用这个库,我们需要提供一个头文件,说明这些库里面有什么,因此,对于使用者而言,只要拿到了头文件和库文件,就可以调用这个库,下面编写libhello的头文件

/slam/ch2/libhello.h

#ifndef LIBHELLO_H_
#define LIBHELLO_H_
void printhello();//源文件中函数的声明
#endif

这样,根据这个文件和刚才编译得到的库文件,就可以使用printhello函数了,最后,我们可以编写一个可执行程序来调用这个函数:
/slam/ch2/helloslam.cpp

#include 
#include "libhello.h"
using namespace std;
int main(int argc,char **argv)
{
        printhello();
        system("pause");
        return 0;
}

然后,在CMakeLists.txt中添加可执行程序的生成命令,链接到刚刚使用的库上面
/slam/ch2/CMakeLists.txt

#添加一个可执行程序  add_executable(程序名 源代码文件名)
add_executable(helloslam helloslam.cpp)
#链接到库函数(可执行文件 被链接的库函数)
target_link_libraries(helloslam hello)

接下来编译执行即可:
CMake生成并使用库函数_第2张图片

你可能感兴趣的:(C++,c++,开发语言)