CMake生成静态链接库并导入使用详解
创作时间:
作者:
@小白创作中心
CMake生成静态链接库并导入使用详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_42102546/article/details/145803764
本文将介绍如何使用CMake生成静态链接库,并在另一个项目中导入和使用该静态库。通过本文的学习,读者将能够掌握CMake的基本使用方法,以及如何创建和使用静态库。
1. 创建静态库项目
项目结构
首先,创建一个名为xlog的文件夹,用于存放静态库的相关代码。在该文件夹下创建以下文件:
CMakeLists.txtxlog.cppxlog.h
CMakeLists.txt
# CMakeLists.txt cmake文件名大小写不敏感
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.20)
# 构建项目的名称
project(first_cmake)
# 创建各种类型的库
# [STATIC | SHARED | MODULE]:可选参数
# STATIC:创建静态库,静态库在链接时会被完整地复制到可执行文件中。
# SHARED:创建共享库(动态链接库),共享库在运行时动态加载,多个程序可以共享同一个共享库。
# MODULE:创建模块库,通常用于插件系统,不会被链接到可执行文件中,而是在运行时通过特定机制加载。如果不指定该参数,CMake 会根据 BUILD_SHARED_LIBS 变量的值来决定创建静态库还是共享库。
add_library(xlog STATIC xlog.cpp xlog.h)
# 构建执行程序
# add_executable(first_cmake 101first_cmake.cpp)
xlog.cpp
#include "xlog.h"
#include <iostream>
using namespace std;
XLog::XLog() {
cout << "Create Xlog" << endl;
}
xlog.h
//xlog.h
#ifndef XLOG_H
#define XLOG_H
class XLog
{
public:
XLog();
};
#endif
构建静态库
在xlog文件夹下创建一个名为build的目录,然后执行以下命令:
mkdir build
cd build
cmake ..
cd ..
cmake --build build
构建完成后,可以在build目录下看到生成的静态库文件libxlog.a。
2. 使用静态库
接下来,创建一个名为test_xlog的项目,用于测试刚刚创建的静态库。
项目结构
在test_xlog文件夹下创建以下文件:
CMakeLists.txttest_xlog.cpprun.sh
CMakeLists.txt
# CMakeLists.txt cmake文件名大小写不敏感
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.20)
# 构建项目的名称
project(test_xlog)
# 注意在设定查找时是根据 当前cmakelists.txt的相对路径进行查找的
# 指定头文件查找路径
include_directories("../xlog")
# 指定库查找路径
link_directories("../xlog/build")
# 构建执行程序
add_executable(test_xlog test_xlog.cpp)
# 指定加载的库 (要放置 构建执行程序后面, 因为这是加载执行程序的依赖库)
target_link_libraries(test_xlog xlog)
test_xlog.cpp
#include <iostream>
#include "xlog.h"
using namespace std;
int main(){
XLog log;
cout<<"test xlog"<<endl;
return 0;
}
run.sh
为了方便构建,可以创建一个run.sh脚本:
cd /root/UniSecurity/cmake_xue/test_xlog
rm -r build
mkdir build
cd build
cmake ..
cd ..
cmake --build build
执行run.sh脚本后,将在test_xlog/build目录下生成可执行文件test_xlog。运行该可执行文件,可以看到输出结果:
热门推荐
吊灯安装的正确步骤和注意事项
如何正确刷牙:专业牙医的全面指南
私募基金的运作方式是什么?其投资策略有哪些特点?
小岗村:红手印再绘振兴图
解读十天干之癸水
小儿急性中耳炎吃点什么
平价护手霜秋冬选择指南:成分和使用小窍门
如何了解网络安全动态
约翰·洛西:托马斯·库恩论“常规科学”和“革命科学”
科学进步的矛盾:库恩的视角解析
水仙花四首(其三)
IDC数据中心的冗余系统设计
4岁男孩不慎被洁厕剂溅入眼睛,这位母亲的做法值得学习
结膜炎患者揉眼后眼球粗糙应如何处理
《爱情自有天意》短剧魅力:带你领略情感巅峰
趣味港博 | 快来辨一辨六朝瓷器的不同面貌
“养老机构”停业风波:银发经济热,专家称多部门应合力监管
对英国来说,为何王室非常重要?
八字如何影响父母关系 八字克父母的威力解析
歌声中的深情眷恋——听《再见了,大别山》有感
如何通过眼睛来提神
体悟历史故事背后的启示与智慧
什么是绿色建筑?申报流程、评价体系、性能模拟分析、标准规范和绿建技术全解析
苏轼《临江仙·送钱穆父》全文及鉴赏
临江仙·送钱穆父
远离腰椎间盘突出症,这样“坐”和“躺”才正确
从安徽阜阳走出来的中科院院士、我国著名的无机化学家谢毅
孩子眼睛眨个不停?小心儿童异常瞬目症!
项目管理看板搭建完全指南:从入门到进阶
南京大学是985还是211大学?