Linux CMakeLists编写之静态库

目录

  • 1 概述
  • 2 文件命名
  • 3 实例
  • 4 代码分析

1 概述

  编译工具有很多(make/cmake/BJam)。cmake是跨平台,使用cmake编译需要编写CMakeLists.txt。本文编写CMakeLists.txt来生成C++静态库。

2 文件命名

文件命名为CMakeLists.txt,是一个文本文件,可以使用任何编辑器编辑。
本文使用cmake程序版本:

$cmake --version
cmake version 3.16.3CMake suite maintained and supported by Kitware (kitware.com/cmake)

3 实例

这里以CppCmd库代码为例,代码目录结构:

cppcmd$ tree
.
├── CMakeLists.txt
├── cmdhelper.h
├── cmdio.cpp
├── cmdio.h
├── cppcmd.cpp
└── inc└── cppcmd.h1 directory, 6 files

CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 3.13)set(CPPCMD_VERSION 1.0.0)
project(cppcmd VERSION ${CPPCMD_VERSION} LANGUAGES CXX)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)include_directories(./inc)
file(GLOB SRC *.cpp)
set(CMAKE_CXX_FLAGS "-std=c++11")add_library(${PROJECT_NAME} ${SRC})

编译结果:

cppcmd$ mkdir build
cppcmd$ cd build/
build$ cmake ..
-- The CXX compiler identification is GNU 10.5.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/james/git/cppcmdv1.0.0/cppcmd/build
james@DESKTOP-GNG18AT:build$ make
Scanning dependencies of target cppcmd
[ 33%] Building CXX object CMakeFiles/cppcmd.dir/cmdio.cpp.o
[ 66%] Building CXX object CMakeFiles/cppcmd.dir/cppcmd.cpp.o
[100%] Linking CXX static library lib/libcppcmd.a
[100%] Built target cppcmd

说明:

  • 编译生成静态库libcpptes.a文件放在build/lib目录下
  • 编译生成.o放在build/CMakeFiles/cppcmd.dir/目录下

4 代码分析

cmake_minimum_required(VERSION 3.13)                        # 设置使用cmake的最小版本,这里最小版本是3.12set(CPPCMD_VERSION 1.0.0)                                   # 设置变量CPPCMD_VERSION,其值为1.0.0
project(cppcmd VERSION ${CPPCMD_VERSION} LANGUAGES CXX)     # 设置工程名称,版本,开发语言
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # 设置库文件输出路径为build/libinclude_directories(./inc)                                  # 设置include路径,这里是当前路径下inc目录
file(GLOB SRC *.cpp)                                        # 行设置要编译的源文件,这里将当前路径下所有cpp文件名称,放在变量SRC中
set(CMAKE_CXX_FLAGS "-std=c++11")                           # 设置定义C++编译选项,C++使用C++11标准add_library(${PROJECT_NAME} ${SRC})                         # 设置静态库名称及依赖的源文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何加密电脑文件?电脑重要文件怎么加密?

在电脑中,我们会存储很多重要文件,包括个人隐私视频、照片,企业机密数据,工作数据等。为了避免重要文件泄露,我们需要加密保护电脑文件。下面我们就来了解一下电脑文件怎么加密? 超级加密3000 当需要加密电…

[其他]MBTI各个字母分表代表什么

一、什么是MBTI? MBTI(Myers-Briggs Type Indicator),一种迫选型、自我报告式的性格评估测试,用以衡量和描述人们在获取信息、作出决策、对待生活等方面的心理活动规律和性格类型。 二、MBTI各字母含义 MBTI倾向显示…

赶紧收藏!2024 年最常见的操作系统面试题(六)

上一篇地址:赶紧收藏!2024 年最常见的操作系统面试题(五)-CSDN博客 十一、什么是I/O操作?请解释缓冲I/O和直接I/O的区别。 I/O操作,即输入/输出操作,是计算机科学中指数据在计算机系统内部和外…

Python语法基础三

12.range()函数 python 的 range() 函数可用来创建一个整数列表,一般用在 for 循环中. **range()语法:**range(start, stop[, step])**start:**计数从start开始,默认是从0开始(闭区间),如:range(5)等价于range(0,5).**stop:**计…

vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图: 问题描述:一般情况下使用iframe标签就可以实现文件预览,但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件(vue-office/docx)来实现预览了。下面介绍使用方法。 安装插件:n…

Lua C API

Lua 5.4 Reference Manual - contents官方网站

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表) 文章目录 力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)一、31. 下一个排列二、4. 寻找两个正序数组的中位数三…

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点,在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域,但现在它比以往任何时候都更易于接触。 但不要被愚弄,量化交易仍然是一种高速、高压的游戏,在毫秒间可以赚到或失去财富…

FlashST 短期交通预测领域的插件式创新

FlashST: A Simple and Universal Prompt-Tuning Framework for Traffic Prediction:一篇在短期交通预测领域的插件式创新,主要解决不同数据集和任务下的分布漂移问题。 方法:采用二阶段训练的方法,一阶段在PEMS03478数据集上进行…

STM32CubeIDE复制工程文档

目录 1. 粘贴复制2. 重命名 1. 粘贴复制 复制粘贴 重命名,别重名,点击- copy 结果 2. 重命名 重命名 ioc文件 编译 OK

IDEA 安装与激活详细教程最新(附最新激活码)2099年亲测有效!

我们先从 IDEA 官网下载 IDEA 2024.1 版本的安装包,下载链接如下: https://www.jetbrains.com/idea/download/ 点击下载(下载Ultimate版),静心等待其下载完毕即可。 激活方式: 正版专属激活码领取

教程:Spring Boot中如何集成GraphQL

教程:Spring Boot中如何集成GraphQL 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 随着现代应用程序的复杂性增加,API的设计和…

基本的网络设备:集线器、中继器、网桥、交换机、路由器、防火墙等

基本的网络设备:集线器、中继器、网桥、交换机、路由器、防火墙等 基本功能、原理、优缺点集线器(Hub)中继器(Repeater)网桥(Bridge)交换机(Switch)路由器(Ro…

手机越用越慢?试试这4个秘籍,让手机流畅如新

智能手机作为日常生活的得力助手,最初总是以惊人的速度和流畅性给我们留下深刻印象。 但你有没有发现,随着时间的推移,手机似乎开始变得不那么敏捷,甚至出现了反应迟缓和卡顿的情况? 别让这个问题困扰你,下面是四个关…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0,但集群或服务仍然使用了swap分区,可能原因就是内存没有同步配置 echo “0” > …

step5:“串口设置”逻辑(下)

文章目录 文章介绍效果图SerialPort.qml代码v1代码v2代码v3 文章介绍 文章qml/c:基础界面的“串口设置”逻辑1实现了 1、串口连接,连接成功的弹窗提示 2、读取数据。 本篇文章需要实现的功能是 1)接收数据后更新“已接收”的行数 效果图 Se…

【代码随想录算法训练营第五十天|1143.最长公共子序列、1035.不相交的线、53.最大子数组和、392.判断子序列】

文章目录 1143.最长公共子序列1035.不相交的线53.最大子数组和392.判断子序列 1143.最长公共子序列 和最长连续子序列的区别是,除了在text1[i]text2[j]的时候要令dp[i][j] dp[i-1][j-1] 1之外,在不相等的时候dp[i][j]同样需要赋值,在text1…

Map的五种遍历方式

在Java中,Map是一种键值对的集合,用于存储键值对的数据结构。它提供了一种通过键来查找和访问值的方式,每个键都是唯一的,而值可以重复。 特点和常见实现类 键值对的存储:Map以键值对(key-value pair&#…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM,并采用它们在电影评论数据集上实现文本分类,会涉及以下几个知识点。 1. 词表构建:包括数据清洗,词频统计,词频截断,词表构建。 2. 预训练词向量应用:下载并加载Glove的…

鸿蒙星河NEXT学习笔记

1.1 字符串 // 变量的存储和修改(string number boolean) // 1. 变量存储 // 1.1 字符串 string 类型 // 注意点1:字符串需要用引号引起来(单引双引号)字符串 "字符串" // 注意点2:存储的时候&a…