编写一个简单通用的makefile

编写通用Makefile 近期在看韦东山的数码相框视频,有讲到怎么写一个通用的 阅读详情

author:李超

date:2012/05/06

      纵然makefile的规则还是相当多的,编写一个大规模的软件,良好的makefile架构是方便维护程序编译的关键。学习makefile的时间周期还是比较长的,为了写出规范的代码,需要在很短的时间内编写一个makefile,这里给给出一个makefile示例。在组织程序的时候可以按照这个示例给出的结构进行,同时还能提高程序的可读性和合理的目录结构。

      先贴出makefile的代码:

 

 
  1. CC = gcc 
  2.  
  3. CXX = g++ 
  4.  
  5.   
  6.  
  7. CLINKER = gcc 
  8.  
  9. CXXLINKER = g++ 
  10.  
  11.   
  12.  
  13. DEFINES += 
  14.  
  15.   
  16.  
  17. CFLAGS += 
  18.  
  19. CXXFLAGS += 
  20.  
  21. LINKFLAGS += 
  22.  
  23.   
  24.  
  25. LINK = $(CXXLINKER) 
  26.  
  27.   
  28.  
  29. INCPATH += 
  30.  
  31.   
  32.  
  33. LIBS +=  
  34.  
  35.   
  36.  
  37. OBJECTS = main.o 
  38.  
  39.   
  40.  
  41. TARGETS = producer_consumer 
  42.  
  43.   
  44.  
  45. DEL = rm -rf 
  46.  
  47.   
  48.  
  49. first:all 
  50.  
  51.   
  52.  
  53. .SUFFIXES: .o .c .cpp .cxx .cc .C 
  54.  
  55.   
  56.  
  57. .c.o: 
  58.  
  59.        $(CC) -c $(INCPATH) $(CXXFLAGS) -o "$@" "$<" 
  60.  
  61. .cpp.o: 
  62.  
  63.        $(CXX) -c $(INCPATH) $(CXXFLAGS) -o "$@" "$<" 
  64.  
  65. .cxx.o: 
  66.  
  67.        $(CXX) -c $(INCPATH) $(CXXFLAGS) -o "$@" "$<" 
  68.  
  69. .cc.o: 
  70.  
  71.        $(CXX) -c $(INCPATH) $(CXXFLAGS) -o "$@" "$<" 
  72.  
  73. .C.o: 
  74.  
  75.        $(CXX) -c $(INCPATH) $(CXXFLAGS) -o "$@" "$<" 
  76.  
  77.   
  78.  
  79. all:$(TARGETS) 
  80.  
  81. $(TARGETS):$(OBJECTS) 
  82.  
  83.        $(LINK) $(LINKFLAGS) -o $(TARGETS) $(OBJECTS) $(LIBS) 
  84.  
  85.        
  86.  
  87. clean: 
  88.  
  89.        $(DEL) $(OBJECTS) 

 

      首先,要说明的是这个makefile对应的是C和C++的源程序。对于一个makefile,我们需要定义的关键信息有:

 

l C编译器

l C++编译器

 

l C链接器

l C++链接器

 

l C编译标志

l C++编译标志

 

l C链接器的标志

l C++链接器的标志

 

l 编译时指定的宏

 

l 程序中用到的头文件所在的目录

 

l 程序中引用的库函数所在的目录,以及所用到的库

 

l 生成的可执行文件的名称

 

l 生成的可执行文件所需要的目标文件

 

         OK,大致就是这些内容。有了这些信息之后,我们就利用隐形规则编写生成目标文件的命令了。在上面的makefile文件中:

u 变量CC表示C编译器

u 变量CXX表示表示C++编译器

u 变量CLINKER表示C链接器

u 变量CXXLINKER表示C++链接器

u 变量DEFINES表示定义的宏

u 变量CFLAGS表示编译C程序时需要的标志

u 变量CXXFLAGS表示编译C++程序时需要的标志

u 变量LINKFLAGS表示链接时用到的标志

u 变量LINK用来指定最终链接时用到的编译器

u 变量INCPATH用来指定头文件所在的路径(-I)

u 变量LIBS用来指定用到的库文件所在的目录以及要链接的库(-L  -l)

u 变量OBJECTS用来指定生成可执行文件所需要的目标文件

u 变量TARGET用来指定可执行文件的最终名称

         接下来就要编写makefile的第一个规则---入口规则,在makefile中使用 first:all,就是告诉make首先去all这个label处执行命令。

         然后再看all这个label,all依赖于$(TARGET),所以make程序回去生成 $(TARGET),所以就顺理成章的执行了all下面这条命令:

         $(LINK) $(LINKFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)

         由于开始的时候,还没有生成所需要的目标文件(OBJECTS指定的),所以回去执行那些隐式规则以生成目标文件。这些隐式规则是由 .SUFFIX这行以及后续的几行指定的。

         .SUFFIX说明了项目中用到的文件的后缀。然后再接下来几行中,对每个源文件的后缀和目标文件后缀的映射关系安排相应的命令,使之能够生成相应的目标文件,最终生成可执行文件。

         至于clean就不多说了。

本文出自 “相信并热爱着” 博客,请务必保留此出处http://hipercomer.blog.51cto.com/4415661/854816

Makefile文件的编写 文章目录前言一、最简单的 Makefile 文件举例二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 Makefile文件的编写规则及内容 一、最. 阅读详情

相关推荐

Makefile构建多级目录项目

1)MakeFile是什么 根据百度: MakeFile是一个文件。 MakeFile是一个文本文件。 Makefile是make工具执行自动化编译流程的依据文本文件。 就像编译一个可执行程序一样: xxx.c是一个文件。 xxx.c是一个文本文件。 xxx.c是gcc工具执行编译的依据文本文件。 xxx.c文件需要遵守C语言语法规则去编写;同样的,Makefile文件需要遵守Makefile语......

qq_39525606的博客 4302

通用makefile编写

编译过程:预处理(#),编译(.c->.S),汇编(.S->.o),链接(.o+库文件=执行文件) Makefile编译链接文件 核心:规则     目标:依赖        命令 命令执行的条件: i. "依赖"文件 比 "目标"文件新 ii.没有"目标"这个文件 ...

qq_43604517的博客 531

c/c++简单项目通用makefile

c/c++简单项目通用makefile 目录结构 src: 源文件目录 include: 头文件目录 bin: 可执行文件目录 obj: 目标文件目录 makefile: 单个源文件makefile目录,用于自动生成依赖 .gitignore: 用于git忽略构建相关文件,包括bin/, obj/以及makefile/ . |-- src/ |-- include/ |-- bin/ ...

just do it! 1056

通用Makefile

引言: 在去年(2018年)的这几个月开始接触ZYNQ,主要是做PS端的驱动开发。直到今年6月份的时候突然接手了一个应用层的工程,用的是Vivado提供的SDK来做的编辑和编译器。然而我还是习惯了使用sourceinsight(下面简称SI)来编写代码,这个倒是可以直接创建一个SI工程就行了,但是可怕的事情发生了,就是我的SI是为了兼容以前的单片机代码从而设置的字符集是GB2312的,...

h244259402的专栏 1463

骚动:Vivado构建系统

骚动 Makefile / TCL hybrid固件构建系统 文献资料 MicroblazeBasicCore MicroblazeBasicCore是一个简单的Microblaze实现(BRAM缓存)。 示例: : 用户定义的TCL脚本列表 用户定义的TCL脚本位于目标的vivado目录中。 当make目标为“ prom”时,不需要这些用户定义的TCL脚本。 然后必须定义promgen.tcl并存在。 这是用户定义的TCL脚本的完整列表: 用户文件名 源.TCL位置 project_setup.tcl vivado / project.tcl properties.tcl vivado / properties.tcl messages.tcl vivado / messages.tcl sources.tcl vivado / sources.tcl pre

ArcGIS:根据DEM数据提取区域水系

利用DEM数据提取区域水系是常见的水文分析应用,为了获取区域的矢量水系数据,我们可以通过ArcGIS对高程DEM数据进行水文分析,为地表水流建立模型,进而获取到该地的水系数据,DEM数据精度越高,获取到的水系数据精度也就越高。以下介绍如何用ArcGIS提供的工具提取水系。

Oruizn的博客 9109

vivado 映射Makefiles

vivado 映射Makefiles

cckkppll的博客 1021

Python 爬虫:获取网页数据的 5 种方法

requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。

想看什么文章都可以私信给我,综合性博客。 5513

基于 Makefile 的 FPGA 构建系统

构建 FPGA 时通常依赖 FPGA 提供商提供的开发环境和一系列工具,虽然每个厂商提供的集成开发环境不尽相同,但是基本原理都是给定 HDL 设计源文件, 仿真文件,以及约束文件,然后根据这些文件进行仿真或综合约束,最终输出可用于烧录的比特文件.bit。一般来说集成开发环境 (IDE) 都由前端 GUI 编辑器以及后端的代码编译器以及代码分析等各种命令行工具组成,FPGA 的集成开发环境也不例外。

qq_36525177的博客 3616

MINI PCIE接口设计要点:

3.3Vaux(5pins):3.3V电源。PERST#信号通过外接复位电路,可实现模块复位。模块可以通过硬件方式或软件方式关闭射频通信(不包括 GNSS)。LED_WWAN#:(O)漏极开漏,低有效。:(I)低激活系统禁止射频信号(飞行模式),因此需加上拉。UIM_PWR (1 pin):(O)UIM的电源输出。SMB_DATA:SMBus2.0数据信号线。UIM_VPP:(O)A类设备的可变电源电压。SMB_CLK:SMBus2.0时钟信号线。UIM_RESET:(O)UIM的复位信号。

qq_40010777的博客 8239

保姆级教程:用GROMACS 2022.4的拉伸模拟(SMD)加速蛋白-蛋白组装过程

本文详细介绍了如何使用GROMACS 2022.4的拉伸分子动力学模拟(SMD)技术加速大蛋白组装过程。通过CHARMM36力场和SMD技术,将传统需要数月的蛋白结合过程缩短至数天,大幅提升模拟效率。文章包含参数设计、索引组创建、周期性边界处理等实战技巧,并提供了完整的GPU加速工作流和常见问题解决方案。

weixin_30338481的博客 445

Makefile的编写快速入门

Linux 下万能Makefile的编写如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片注释也是必不可少的 在学习Linux下使用C语言编程的时候,我们需要为自己的项目编写一个Makefile文件,利用Linux中make命令工具来编译生成一个可执行程序,但是,在更换项目的同时,我们又需要重新编写Makefile文件,所以我们需要一种万能的Makefile文件,每个项目都可以使用同一Mak...

qq_32203275的博客 313

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1892

【Linux】多文件标准工程目录的Makefile编写及通用模板

在这里我们介绍多文件Makefile的编写,多文件标准工程目录的Makefile的编写及通用模板。

请赐予我力量 6277

Fluent DPM模型保姆级教程:三通管颗粒流动模拟,从网格导入到轨迹图生成

本文提供Fluent DPM模型在三通管颗粒流动模拟中的保姆级教程,涵盖从网格导入到轨迹图生成的全流程。通过详细步骤和参数设置,帮助用户掌握DPM模型在颗粒流动模拟中的关键技巧,适用于化工、能源等领域的工程应用。

weixin_30615767的博客 579

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

本文为本人在安装pgvector中踩过的坑,已找到解决方法,现向大家分享。

m0_62627802的博客 2万+

通用的Makefile源码解析

A. 在Makefile文件中确定要编译的文件、目录,比如obj-y += main.oobj-y += a/"Makefile"文件总是被"Makefile.build"包含的。解释:寻找"text"中符合格式"pattern"的字,用"replacement"替换它们。此时,我们需要把"clean"这个目标,设置为"假想目标",这样可以确保执行"make clean"时执行删除命令。如果当前目录下,恰好有名为"clean"的文件,那么执行"make clean"时就不会执行那些删除命令。...

weixin_71478434的博客 1123

基于STM32设计的遥控灭火消防小车_296

随着城市化进程的加速和火灾发生频率的增加,传统的消防方式在应对初期火灾时存在反应慢、效率低等问题。为了提高火灾响应速度和灭火效率,本设计开发了一款基于STM32单片机的遥控灭火消防小车。该小车配备了烟雾检测、温湿度监测、火源定位、灭火操作等功能,能够通过蓝牙和WIFI实现远程控制与实时视频传输。设计采用了MQ2烟雾传感器、SHT30温湿度传感器、火光传感器和ESP32摄像头模块等硬件设备。系统不仅能够自动检测和定位火源,还可以手动调整灭火器对准位置,进行干粉灭火。此外,蜂鸣器用于火源报警,确保操作人员及时得

722

MakeFile学习记录

MakeFile 学习记录。

guihunkun的博客 803

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

makefile 进阶

一步一步写一个简单通用的makefile(一) 一步一步写一个简单通用的makefile(二) 一步一步写一个简单通用的makefile(三) 一步一步写一个简单通用的makefile(四) ...

weixin_34232363的博客 198

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精简Makefile

如果在Linux下玩不转Makefile,那你真out了,这应该是Makefile较为精华的部分,难得共享。 一、一个简单通用的Makefile例子 1.编写源文件 5个源文件:A.c B.c C.c D.c main.c 5个头文件:A.h B.h C.h D.h main.h 在同一目录,不同目录下,如果目录多,一般用autotools生成Makefile。可链接:autot...

编程语言小筑 91

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

通用Makefile的编写和在项目工程中使用Makefile(包括动态库、静态库的链接、整个工程联合编译)

一、通用Makefile文件的编写        (1)、什么是通用Makefile?                     这里的通用Makefile指的是它既能编译可执行文件、也能编译动态链接库、又能编译静态库,只需要更改很少的内容即可。        (2)、写一个通用Makefile #-------------------------配置区域------

迷雾江湖 的博客 8400

自己写一个简单通用的Makefile

一.makefile的作用           Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中记录有文件的信 息,在make时会决定在链接的时候需要重新编译哪些文件。Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动发现最终

阳光玻璃杯 7405

编写一个开箱即用的Makefile

实现一个开箱即用的makefile

weixin_52829120的博客 1358
上一篇: 管理系统中的进程--top命令
下一篇: vhdl 编写counter ,模拟钟表
下木
博客等级 码龄16年 88粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值