当前位置: 首页 > news >正文

STM32/keil把多个c文件编译为静态库lib

把常用的、不经常修改的代码库编译成lib以后,可以加快整个工程的编译速度。

一个常见的应用场景就是,把ST的标准库或HAL库等编译成lib,这样以后再编译整个工程时,就无需再次编译他们了,可以节省编译时间。当然,坏处是,无法通过右键跳转到函数定义了。

1、把打算编译成lib的多个c文件放到同一个group。你也可以不把这些c文件放到同一个lib,这不影响后续步骤。放到同一个group的目的是,仅仅是方便后续操作而已。

如下图,我们可以新建一个group。

2、编译项目,保证项目可以编过(最好是0 warning 0 error),否则,后续无法正确生成lib库,即使强行生成,那也是错的。

3、右击【组】-> Option for Group。。。。

4、取消勾选【include in target build】,也即,这个组将不会被编译。按照这个步骤,把所有不打算编译的group,都取消勾选,只保留打算编译为lib的那个组。

5、效果如下所示,不编译的组会有红色的减号图标:

5、依次点击【魔术棒】->output,然后修改可执行文件的名称Name of Executable,自己随便起一个名字就行了,我起的名字叫"mylib"。然后选择可执行文件的类型为lib,也即选中【Create Library】单选框。

备注:下图的Create Executable单选框就是默认的,也即生成hex文件。这里因为我们不想要hex,而是要lib,所以就不选它了。

6、点击全编rebuild按钮,,编译完,即可在项目的文件夹中找到mylib.lib这个文件。

7、把已被编译为lib的c文件全部删掉或挪出项目文件夹(h文件要保留在原处),这时keil工程树会提示某些文件已找不到,直接右击移除出工程即可,然后,把编译出的lib文件,剪切到原先c文件所在的位置,并把这个lib文件添加进工程树中;

把取消编译的group再重新打开;

把可执行文件类型再改回hex;

重新编译项目,此时我们发现,在没有那一堆C文件的情况下,也能编译通过,并生成hex了。

通过以上步骤,各位应该知道为什么要把想要编译为lib的那一堆c文件放到同一个group了,如果不这么干,你就得一个一个右击c文件,选择排除编译,如果文件多,那要累死了,还是把整个组一下子给干掉来的舒服。

如果想把多个c文件,分别编译成一个个对应的lib,步骤基本一样,只能把其余文件或组一个个排除编译。

相关文章:

  • C++的算法:拓扑排序的原理及应用
  • WWDC 2024前瞻:苹果如何用AI技术重塑iOS 18和Siri
  • VMware ESXi 8.0U2c macOS Unlocker OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版
  • dp+矩阵快速幂,CF551D. GukiZ and Binary Operations
  • 【数据分析基础】实验一 Python运算符、内置函数、序列基本用法
  • 什么时候用C而不用C++?
  • mysql当前状态分析(show status)
  • 吃星星(1.5)
  • 网页音频提取在线工具有哪些 网页音频提取在线工具下载
  • 转让无区域商业管理公司挺批行业包变更
  • Windows Server 2008 r2 + NAS
  • 介绍建造者模式
  • Hadoop的Windows环境准备
  • 超详解——识别None——小白篇
  • 『大模型笔记』什么是提示词注入(Prompt Injection)攻击?
  • android 一些 utils
  • Date型的使用
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java教程_软件开发基础
  • JS+CSS实现数字滚动
  • React as a UI Runtime(五、列表)
  • SSH 免密登录
  • 创建一种深思熟虑的文化
  • 高程读书笔记 第六章 面向对象程序设计
  • 前端临床手札——文件上传
  • 设计模式走一遍---观察者模式
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 为什么要用IPython/Jupyter?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • #include<初见C语言之指针(5)>
  • #NOIP 2014#Day.2 T3 解方程
  • (1)Hilt的基本概念和使用
  • (1)STL算法之遍历容器
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (BFS)hdoj2377-Bus Pass
  • (编译到47%失败)to be deleted
  • (分布式缓存)Redis分片集群
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三)mysql_MYSQL(三)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net dataexcel 脚本公式 函数源码
  • .NET单元测试
  • .net的socket示例
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET开发人员必知的八个网站
  • .NET使用存储过程实现对数据库的增删改查
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @PreAuthorize注解