Makefile 的编写

简介: Makefile 的编写
今天学习一下Make file的编写,make工具是用于多文件的编译的汇编工具。好处在于,当使用make编译过一次程序后,会记录每一个文件的时间戳,当修改某些文件后,再次使用make工具编译时,他只会编译修改过时间戳的文件这样相比gcc *.c节省了大量的时间,另外,make可以有选择性的对指定的文件进行编译。
make工具需要自己去写,一般文件的名称为Makefile
**编写Makefile文件**


第一版本:


#目标文件:依赖文件
#tab gcc具体的编译流程
main:main.o doublelist.o mymath.o    
  gcc main.o doublelist.o mymath.o -o main
main.o:main.c    
  gcc -c main.c -o main.o
doublelist.o:doublelist.c doublelist.h    
  gcc -c doublelist.c -o doublelist.o
mymath.o:mymath.c    
  gcc -c mymath.c -o mymath.o


第二版本:


CC=gcc
#CC=arm-linux-gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
#附加编译选项#-Wall:显示所有警告
#-g:用于gdb调试
#-O2:优化最终生成的可执行文件
#-c:汇编阶段所需
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $(FILE) -o $(OBJ)
main.o:main.c    
  $(CC) $(CFLAGS) main.c -o main.o
doublelist.o:doublelist.c    
  $(CC) $(CFLAGS) doublelist.c -o doublelist.o
mymath.o:mymath.c    
  $(CC) $(CFLAGS) mymath.c -o mymath.o
clean:    
  $(RM) $(FILE) $(OBJ)


第三版本:


$@ 目标名

$< 依赖文件列表中的第一个文件

$^ 依赖文件列表中除去重复文件的部分


CC=gcc
#CC=arm-linux-gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
#附加编译选项
#-Wall:显示所有警告
#-g:用于gdb调试
#-O2:优化最终生成的可执行文件
#-c:汇编阶段所需
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $^ -o $@
main.o:main.c    
  $(CC) $(CFLAGS) $< -o $@
doublelist.o:doublelist.c    
  $(CC) $(CFLAGS) $< -o $@
mymath.o:mymath.c    
  $(CC) $(CFLAGS) $< -o $@
clean:    
  $(RM) $(FILE) $(OBJ)


第四版本:


CC=gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $^ -o $@
%*.o:%*.c    
  $(CC) $(CFLAGS) $< -o $@
clean:    
  $(RM) $(FILE) $(OBJ)


使用:

在终端直接敲:make

如果要删除.o和可执行文件:make clean

目录
打赏
0
0
0
0
1
分享
相关文章
构建高效机器学习模型的五大关键步骤
在数据科学领域,搭建一个高效的机器学习模型是实现数据驱动决策的核心。本文详细阐述了从数据预处理到模型评估五个关键步骤,旨在为读者提供一个清晰的建模流程。文中不仅介绍了各个步骤的理论依据,还结合了实用的技术细节,以期帮助读者在实际工作中构建出既健壮又精确的机器学习系统。
307 5
DataWorks常见问题之DataWorks没有设置并行任务数的地方如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
403 14
电商行业中 API 接口的常见问题和解决方法?
电商行业中 API 接口面临的常见问题包括安全性问题、性能问题、兼容性问题、可靠性问题和可维护性问题。针对这些问题,可以采取相应的解决方法,如采用加密技术、优化数据库查询、制定统一的接口规范、进行容错处理、采用良好的代码结构等。
327 0
Angular 与 Node.js 无缝对接简直太牛啦!前后端分离最佳实践,开启高效开发新时代!
【8月更文挑战第31天】随着互联网技术的发展,前后端分离模式日益受到开发者青睐。本文综述了 Angular 与 Node.js 的优势及无缝对接技术,探讨了前后端分离的最佳实践。Angular 以其组件化开发、双向数据绑定等特性成为优秀的前端框架;Node.js 则依靠高并发处理能力和全栈 JavaScript 开发的优势在后端大放异彩。两者结合通过 HTTP 请求实现高效通信,并可通过数据库实现数据共享。此外,文章还强调了接口设计、代码分离、测试及部署等方面的最佳实践,为开发者提供了全面的指导。
335 0
我在AIGC和数字中台方面的架构升级设计
整个研究的目标点是为了针对于数字中台层级的超级自动化,这个是在继Ops架构体系之后的一个突破点,前两年在Ops架构突发和成熟,比如 DevOps/GitOps/DataOps/AIOps等体系(这里不涉及AIOps架构),在某个方面已经具备一定的自动能力,进而发展出数字中台的基础设施能力。
DevOps实践-SCM代码仓库管理
人在不同的阶段对于同一件事会有不同的理解。而且每个人都来说个人方向选择、精力与经历都左右着对同一件事情的理解。
419 0
DevOps实践-SCM代码仓库管理
想成为一名顶尖Java开发工程师?这些优化手段一定要掌握!(七)
想成为一名顶尖Java开发工程师?这些优化手段一定要掌握!
165 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问