cmake简单使用-生成库

版权声明:学习记录~ https://blog.csdn.net/robinhjwy/article/details/78856454

上一篇写了个最最最简单的cmake使用方式。这篇增加生成库的内容。

在C++中,并不是所有的代码都会被编译成可执行文件。只有带main()函数的文件才会生成可执行文件。而另外的很多代码只是想打包成一坨,以供其他程序调用(比如你写了一个牛逼的双色球预测函数,别人才不管你怎么写的,只要能调用就好了!!),这一坨就叫

根据C++我们知道,一个库需要有头文件和库文件。我们来写一个简单的库:

头文件为libHelloSLAM.h

//头文件libHelloSLAM.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_

void printHello();

#endif

很简单,头文件只需要包含函数的声明即可~

库文件为libHelloSLAM.cpp

//库文件libHelloSLAM.cpp

#include <iostream>
using namespace std;

void printHello()
{
    cout<<"Hello SLAM"<<endl;
}

也很简单,提供了一个printHello()函数,如果你经常打印这句话的话,就不用每次都自己写了,直接调用这个函数就好了。

好,库写完了,还需要调用库的测试程序,也就是调用这个库的可执行程序。
测试程序为useHello.cpp

//可执行程序useHello.cpp

#include "libHelloSLAM.h"

int main( int argc, char** argv )
{
    printHello();
    return 0;
}

最后,程序都写好了,既然我们要用cmake,那CmakeLists.txt必不可少!

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project( HelloSLAM )

# 设置编译模式为Debug模式
set( CMAKE_BUILD_TYPE "Debug" )

# 生成一个静态库,会生成一个libhello.a文件
add_library( hello libHelloSLAM.cpp )
# 生成一个共享库,会生成一个libhello_shared.so文件
add_library( hello_shared SHARED libHelloSLAM.cpp )

# 生成可执行文件useHello
add_executable( useHello useHello.cpp )

# 将可执行程序链接到上库文件
target_link_libraries( useHello hello_shared )

这里来看一下CmakeLists.txt,

add_library()指令会生成库:
add_library( hello libHelloSLAM.cpp )生成静态库、
add_library( hello_shared SHARED libHelloSLAM.cpp )添加 SHARE 后,生成共享库。

有了库之后,需要链接,
target_link_libraries()指令将目标文件链接到库文件上。
target_link_libraries( useHello hello_shared )这里为链接到共享库。

可以发现,add_开头的指令,都会生成东西,add_library生成库,add_executable生成可执行文件。

OK,一切准备妥当,此时文件夹中是这样的:
这里写图片描述
没啥问题,继续我们就可以四步走战略:

mkdir build
cd build
cmake ..
make

cmake..之后,我们看一下build文件夹中有什么(原文件夹中只是多了个build文件夹,没啥看头):
这里写图片描述
发现,cmake阶段生成了几个文件,当然最重要的就是MakeFile,不过静态库.a文件和共享库.so此步并没有生成。

好,继续make
这里写图片描述
我们需要的静态库libhello.a、共享库libhello_shared.so、可执行文件useHello都出来了!

运行useHello测试一下:
这里写图片描述
OK~~~没毛病!

从中我们能看到,cmake阶段真的只是去生成makefile文件,所有的编译链接都是有了makefile之后,在make指令下完成的!!!

猜你喜欢

转载自blog.csdn.net/robinhjwy/article/details/78856454