源码技术
php
java
python
Linux
行业商讯
当前位置:
首页
>
Linux
>Linux下几个Makefile通用模板
Linux下几个Makefile通用模板
2026-10-21 13:27:47
Linux下几个Makefile通用模板
本文分享
三个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
【要点说明】
【1】程序版本
开发调试过程可能产生多个程序版本,可以在目标文件后(前)增加版本号标识。
【2】编译器选择
Linux下为gcc/g++;arm下为arm-linux-gcc;不同CPU厂商提供的定制交叉编译器名称可能不同,如Hisilicon“arm-hisiv300-linux-gcc”。
【3】宏定义
开发过程,特殊代码一般增加宏条件来选择是否编译,如调试打印输出代码。-D是标识,后面接着的是“宏”。
【4】编译选项
可以指定编译条件,如显示警告(-Wall),优化等级(-O)。
【5】源文件
指定源文件目的路径,利用“wildcard”获取路径下所有依赖源文件。
【6】头文件
包含依赖的头文件,包括源码文件和库文件的头文件。
【7】库文件名称
指定库文件名称,库文件有固定格式,静态库为libxxx.a;动态库为libxxx.so,指定库文件名称只需写“xxx”部分,
【8】库文件路径
指定依赖库文件的存放路径。注意如果引用的是动态库,动态库也许拷贝到“/lib”或者“/usr/lib”目录下,执行应用程序时,系统默认在该文件下索引动态库。
【9】目标文件
调用“patsubst”将源文件(.c)编译为目标文件(.o)。
【10】执行文件
执行文件名称
【11】编译
【12】链接
可创建一个“output”文件夹存放目标执行文件。链接完输出目标执行文件,可以删除编译产生的临时文件(.o)。
【13】清除编译信息
执行“make clean”清除编译产生的临时文件。
2.2 编译静态库Makefile
【要点说明】
基本格式与“编译可执行Makefile”一致,不同点包括以下。
【1】使用到“ar”命令将目标文件(.o)链接成静态库文件(.a)。静态库文件固定命名格式为:libxxx.a。
2.3 编译动态库Makefile
【要点说明】
基本格式与“编译可执行Makefile”一致,不同点包括以下。
【1】编译选项和链接选项增加“-fPIC -shared ”选项。动态库文件固定命名格式为libxxx.so。
3 Demo
3.1 编译应用程序
编写测试例程,文件存放目录结构如下,头文件存放在“include”目录,库文件存放在“lib”目录,源文件存放在“source”目录,Makefile在当前目录下。
源码1:
源码2:
主函数源码:
库文件,“./lib”目录下存放两个库文件,一个静态库libfun_a.a,一个动态库libfun_so.so。
Makefile文件即为“2.1节”的Makefile模板。
测试运行:
【如果执行文件提示无“libfun_so.so”,则需拷贝“libfun_so.so”到根目录下的“/lib”或者“/usr/lib”目录下,因为系统执行程序,默认从该路径引脚动态库】
3.2 生成静态库
编写测试例程,生产的库文件即为“3.1节”调用的库文件(libfun_a.a)。文件存放目录结构如下:
源文件:
Makefile文件即为“2.2节”的Makefile模板。
编译生成静态库:
3.3 生成动态库
编写测试例程,生产的库文件即为“3.1节”调用的库文件(libfun_so.so)。文件存放目录结构如下:
源文件:
编译生成动态库:
来源:https://blog.csdn.net/qq_20553613/article/details/90649734
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
汽车Linux中的远程车辆交互系统
python居然可以中文编程,震大惊
最新文章
汽车Linux中的远程车辆交互系统
Python面向对象学习分享
中午起来,看着ai还在自己写代码,有点恍惚
不会有人还不知道这个学python的神仙网站吧
北交所农大科技出代码了
会写代码的医生,把眼科手术“算”得更准了
又是“00”代码:社区报告 2 起 AMD Ryzen 9800X3D 处理器死亡案例
Linux网络命令大全
一天时间!完成Python数据分析可视化项目
PHP单文件网页批量采集功能
热门文章
PHP函数ftell(): 获取当前文件指针的位置
PHP DebugBar v3 已发布
人类文明的底层代码
AI测试入门:零代码小白也能搞定AI工具测试!建议收藏
70岁的编程大佬,怎么看AI写代码这件事
代码挑战:追逐单词,寻找最长的一个!
输入这3个字的“行动代码”,即可重启你的财务系统.这是清理负债的最短路径.——17878小程序17878调解协商协调
用ai写代码把人逼疯了
“手写代码已不再必要!”Redis之父罕见表态:AI将永远改变编程,网友质疑:我怎么没遇到这么好用的AI!
1月15日绿茵代码3.0计划 今日已更新
随机文章
10个月宝宝每天需要喝多少奶粉?
【重磅上线】不会代码也能做产品!首期AI Coding实战训练营开课啦~
一行代码都不会!花270元、烧光1500次请求,他和5岁儿子一周做出游戏:现在作业直接“玩上瘾”了……
程序员效率起飞!5个AI编程工具让写代码快10倍
程序员危机?AI生成代码的时代,开发者如何保住高薪?
翻译:代码日趋廉价,软件依然昂贵
对话青春 | 以代码坚守初心 用技能点亮梦想——记张俊康同学的成长之路
Redis之父罕见发声:写代码已不再必须!情怀归情怀,事实是事实:编程已经被AI永久改变了!网友炸锅:不服,70%的AI都得重写
代码审计:从“恐慌性询问”到主动风险管理的战略转变
抛弃 try-finally:为什么 Python 大神的代码里,满屏都是 with?
tqdm,一个强大的 Python 库!