CMake生成并使用库函数

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

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

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

/slam/ch2/libhello.cpp

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

该库提供了一个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的文件,这就是我们创建的静态库
在这里插入图片描述
库文件是一个压缩包,里面有编好的二进制函数,如果仅有.a等库文件,那么我们并不知道里面的函数及其调用形式是什么,为了更方的使用这个库,我们需要提供一个头文件,说明这些库里面有什么,因此,对于使用者而言,只要拿到了头文件和库文件,就可以调用这个库,下面编写libhello的头文件

/slam/ch2/libhello.h

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

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

#include <iostream>
#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)

接下来编译执行即可:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMakeLists.txt文件中,通过target_link_libraries命令可以将可执行程序链接到库函数上。例如,在给定的例子中,通过target_link_libraries(helloslam hello)将可执行程序helloslam链接到了名为hello的库函数上。这样在编译和运行程序时,程序就可以使用库函数中定义的功能了。123 #### 引用[.reference_title] - *1* [CMake生成使用库函数](https://blog.csdn.net/qq_41889538/article/details/127101156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [从零学习GCC,Makefile,CMakeList编译](https://blog.csdn.net/amateur_/article/details/113780562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [【cmake开发(1)】C代码编译过程,cmakelist基础步骤](https://blog.csdn.net/djfjkj52/article/details/106613745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值