0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三个Makefile模板分享

STM32嵌入式开发 来源:STM32嵌入式开发 2023-07-10 09:07 次阅读

本文分享三个Makefile模板:编译可执行程序、编译静态库、编译动态库。

1 写在前面

对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。 Linux开发与Windows不同,Linux下一般用的的gcc/g++编译器,如果是开发ARM下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。 Linux下也可以实现“一键编译”功能,此时需要一个编译脚本“Makefile”,Makefile可以手动编写,也可以借助自动化构建工具(如scons、CMake)生成。手动编写Makefile是Linux和Windows程序员的区别之一,一般地一个通用的Makefile能够适合大部分Linux项目程序。

2 三个Makefile模板

2.1 编译可执行文件Makefile

4c9f703e-1e2f-11ee-962d-dac502259ad0.png【要点说明】 【1】程序版本 开发调试过程可能产生多个程序版本,可以在目标文件后(前)增加版本号标识。 4cbd840c-1e2f-11ee-962d-dac502259ad0.png     【2】编译器选择     Linux下为gcc/g++;arm下为arm-linux-gcc;不同CPU厂商提供的定制交叉编译器名称可能不同,如Hisilicon“arm-hisiv300-linux-gcc”。 4cd55d16-1e2f-11ee-962d-dac502259ad0.png     【3】宏定义     开发过程,特殊代码一般增加宏条件来选择是否编译,如调试打印输出代码。-D是标识,后面接着的是“宏”。 4cee1d60-1e2f-11ee-962d-dac502259ad0.png     【4】编译选项     可以指定编译条件,如显示警告(-Wall),优化等级(-O)。 4cfcb582-1e2f-11ee-962d-dac502259ad0.png     【5】源文件     指定源文件目的路径,利用“wildcard”获取路径下所有依赖源文件。 4d0b02e0-1e2f-11ee-962d-dac502259ad0.png     【6】头文件     包含依赖的头文件,包括源码文件和库文件的头文件。 4d19cb22-1e2f-11ee-962d-dac502259ad0.png     【7】库文件名称     指定库文件名称,库文件有固定格式,静态库为libxxx.a;动态库为libxxx.so,指定库文件名称只需写“xxx”部分, 4d33f8f8-1e2f-11ee-962d-dac502259ad0.png     【8】库文件路径     指定依赖库文件的存放路径。注意如果引用的是动态库,动态库也许拷贝到“/lib”或者“/usr/lib”目录下,执行应用程序时,系统默认在该文件下索引动态库。 4d471d8e-1e2f-11ee-962d-dac502259ad0.png     【9】目标文件     调用“patsubst”将源文件(.c)编译为目标文件(.o)。 4d5b741e-1e2f-11ee-962d-dac502259ad0.png     【10】执行文件     执行文件名称 4d6d2646-1e2f-11ee-962d-dac502259ad0.png     【11】编译 4d80923a-1e2f-11ee-962d-dac502259ad0.png     【12】链接     可创建一个“output”文件夹存放目标执行文件。链接完输出目标执行文件,可以删除编译产生的临时文件(.o)。 4d9c3cc4-1e2f-11ee-962d-dac502259ad0.png     【13】清除编译信息     执行“make clean”清除编译产生的临时文件。 4db279e4-1e2f-11ee-962d-dac502259ad0.png

2.2 编译静态库Makefile

4dc75b48-1e2f-11ee-962d-dac502259ad0.png【要点说明】 基本格式与“编译可执行Makefile”一致,不同点包括以下。 【1】使用到“ar”命令将目标文件(.o)链接成静态库文件(.a)。静态库文件固定命名格式为:libxxx.a。

2.3 编译动态库Makefile

4dd70e1c-1e2f-11ee-962d-dac502259ad0.png【要点说明】 基本格式与“编译可执行Makefile”一致,不同点包括以下。 【1】编译选项和链接选项增加“-fPIC -shared ”选项。动态库文件固定命名格式为libxxx.so。

3 Demo

3.1 编译应用程序

编写测试例程,文件存放目录结构如下,头文件存放在“include”目录,库文件存放在“lib”目录,源文件存放在“source”目录,Makefile在当前目录下。 4defa666-1e2f-11ee-962d-dac502259ad0.jpg     源码1: 4e009b6a-1e2f-11ee-962d-dac502259ad0.png     源码2: 4e0f3418-1e2f-11ee-962d-dac502259ad0.png     主函数源码: 4e270c96-1e2f-11ee-962d-dac502259ad0.png     库文件,“./lib”目录下存放两个库文件,一个静态库libfun_a.a,一个动态库libfun_so.so。     Makefile文件即为“2.1节”的Makefile模板。     测试运行: 4e3a121e-1e2f-11ee-962d-dac502259ad0.jpg

【如果执行文件提示无“libfun_so.so”,则需拷贝“libfun_so.so”到根目录下的“/lib”或者“/usr/lib”目录下,因为系统执行程序,默认从该路径引脚动态库】

3.2 生成静态库

编写测试例程,生产的库文件即为“3.1节”调用的库文件(libfun_a.a)。文件存放目录结构如下: 4e564e66-1e2f-11ee-962d-dac502259ad0.png     源文件: 4e6bab44-1e2f-11ee-962d-dac502259ad0.png     Makefile文件即为“2.2节”的Makefile模板。     编译生成静态库: 4e7f8236-1e2f-11ee-962d-dac502259ad0.png

3.3 生成动态库

编写测试例程,生产的库文件即为“3.1节”调用的库文件(libfun_so.so)。文件存放目录结构如下: 4e9aa8fe-1e2f-11ee-962d-dac502259ad0.png     源文件: 4eb1e3ac-1e2f-11ee-962d-dac502259ad0.png     编译生成动态库: 4ec15a26-1e2f-11ee-962d-dac502259ad0.png 来源:https://blog.csdn.net/qq_20553613/article/details/90649734

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11236

    浏览量

    209024
  • 模板
    +关注

    关注

    0

    文章

    108

    浏览量

    20554
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49075

原文标题:Linux下几个Makefile通用模板

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    模板制造的三个主要技术是什么?有什么特点?

    模板制造的三个主要技术是什么?SMT模板的特点是什么?
    发表于 04-25 09:42

    如何鉴别/判断可控硅的三个

    如何鉴别/判断可控硅的三个极 鉴别可控硅三个
    发表于 07-16 22:35 1373次阅读

    驾驭Makefile

    驾驭Makefile在网上你能找到很多关于Makefile的学习资料,但绝大部分给你的只是一知识点,与将Makefile运用到项目中(尤其是大型项目)的差距非常的大。因为,将
    发表于 01-05 17:05 9次下载

    makefile的基本语法

     在Makefile中,最重要的三个概念是:目标(target)、依赖关系(dependency)和命令(command)。目标是指要干什么,即运行make后生成什么;依赖是指明目标所依赖的其他目标;命令则告诉make如何生成目标,这
    发表于 11-12 10:15 1.1w次阅读

    Makefile是什么?Makefile工作原理是怎样的?Makefile经典教程免费下载

    Makefile的重要性 会不会写makefile,从一侧面说明了一人是否具备完成大型工程的能力 makefile带来的好处就是——
    发表于 09-12 17:19 0次下载
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎样的?<b class='flag-5'>Makefile</b>经典教程免费下载

    Makefile的项目模板免费下载

    本文档的主要内容详细介绍的是Makefile的项目模板免费下载 可根据项目名称修改。
    发表于 06-12 08:00 11次下载
    <b class='flag-5'>Makefile</b>的项目<b class='flag-5'>模板</b>免费下载

    三个被动元件的基础知识及应用

    三个被动元件的基础知识及应用
    发表于 03-24 09:41 19次下载
    <b class='flag-5'>三个</b>被动元件的基础知识及应用

    pid控制三个参数怎么调整

    pid控制三个参数怎么调整?
    发表于 09-19 09:08 4.9w次阅读

    STM32编译Makefile模板

    STM32编译Makefile模板
    发表于 11-13 20:06 10次下载
    一<b class='flag-5'>个</b>STM32编译<b class='flag-5'>Makefile</b><b class='flag-5'>模板</b>

    AVR-GCC Makefile 中文翻译

    所有的想要的功能都可以实现。但是我是爱钻牛角尖人,呵呵。看了一下 WINAVR Makefile模板我觉得写得很好,学习了一下,翻译了一下,加上很多我的理解和注释。把它共享给大家,共同进步。这个M...
    发表于 11-15 13:36 35次下载
    AVR-GCC <b class='flag-5'>Makefile</b> 中文翻译

    stm32的makefile分享

    写在前面​ 这是一为stm32f103ze处理器写的裸机工程的makefile,具有建立工程,编译工程,下载hex文件到目标板的功能。​ 依赖于gcc-arm-none-eabi交叉编译
    发表于 12-16 16:58 14次下载
    一<b class='flag-5'>个</b>stm32的<b class='flag-5'>makefile</b>分享

    Makefile】简单实用的Makefile模板来了

    【Linux + Makefile】简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1881次阅读
    【<b class='flag-5'>Makefile</b>】简单实用的<b class='flag-5'>Makefile</b><b class='flag-5'>模板</b>来了

    Makefile】通用模板

    对于上述这样的多.c文件,又不在同一目录下的大型工程中,借助makefile可以来减轻工作任务
    的头像 发表于 04-15 12:47 460次阅读
    【<b class='flag-5'>Makefile</b>】通用<b class='flag-5'>模板</b>

    低温烧结银的三个误区

    低温烧结银的三个误区
    的头像 发表于 09-17 11:54 5937次阅读
    低温烧结银的<b class='flag-5'>三个</b>误区

    mosfet的三个电极怎么区分 mos管三个极电压关系

    MOSFET(金属氧化物半导体场效应晶体管)有三个主要电极,分别是栅极(Gate)、漏极(Source)和源极(Drain)。这三个电极的区分方法如下
    的头像 发表于 09-18 12:42 3.3w次阅读