浅谈Makefile,Makefile万能模板

简介: 浅谈Makefile,Makefile万能模板

Makefile

**

简单写makefile

main:main.o main.h 1.o 1.h
    gcc main.o 1.o -o main 

main.o: main.c main.h
    gcc main.c -o main.o -c

1.o:1.c 1.h
    gcc 1.c -o 1.o -c

解释:

以上例子中:

第一执行make:最终目标是main,main目标文件不存在,需要根据后面的依赖文件和规

则生成main但是main.o及1.o这些依赖不存在,ok,make会去往下找生成main.o和1.o的

生成规则。 先找到main.o,main.o生成依赖main.c和main.h,这两个存在,根据下面的规则

编译生成main.o,还差1.o,继续往下找,同上理生成1.o。这些main目标的依赖文件都有了,

最后使用第一条规则生成main可执行程序。


第二次及后续执行make:查看第一个目标,对比所有目标文件和依赖文件,如果有任何一

个依赖文件的修改时间比目标文件的修改时间新,则执行其对应规则。过程如上,最终完成

更新后最终目标文件的生成。make的这一规则减少了对已编译未更新文件的时间花费。提

高了编译链接速度。

-------------简易版万能Makefile-------------

CFLAG:= -I./inc   #编译参数 可以指定头文件的外在加载路径
          #inc是存放头文件得到文件夹
TARGET:= project
source:= $(wildcard ./src/*.c) #先获取src下面的所有.c文件字符串 放在source中
source+= $(wildcard ./apd/*.c) #再追加添加apd下所有.c文件
Source1:= $(patsubst %.c,%.o,$(source)) #把.c文件按照%c格式替换为%.o格式的.o文件放在objs变量中

$(TARGET):$(Source1)    #把所有.o文件链接生成可执行文件project
  gcc $^ -o $@ $(CFLAG)
 
 %.o:%.c    #把所有的.c文件编译生成.o文件
  gcc -c $^ -o $@ -g $(CFLAG)

.PHONY: clean       #声明后面clean为伪目标
clean:
    rm $(Source1) $(TARGET)
pri:
  @-echo $(Source1) 

wildcard函数:

使makefile中的变量能识别通配符,否则通配符只能在规则命令那里使用

$(wildcard 参数)

函数功能:能够识别参数的通配符 并转换为字符串


例程:

模板:-----> 加载当前目录下的C文件,也可以加载其他目录下的C文件

SOURCES := $(wildcard ./.c)

SOURCES += $(wildcard ./src/.c)

OBJS := ( p a t s u b s t (patsubst %.c,%.o,(patsubst(SOURCES)) #得到对应欲编译生成的*.o目标文件列表


相关文章
|
存储 缓存 人工智能
玄铁 E906处理器简介|学习笔记
快速学习玄铁 E906处理器简介
2880 0
玄铁 E906处理器简介|学习笔记
|
数据库连接 数据库
kettle开发篇-流查询
kettle开发篇-流查询
415 0
|
9月前
|
存储 监控 安全
日志审计是什么?为什么企业需要日志审计?
日志审计是对信息系统中产生的日志进行收集、分析和存储的过程,记录系统活动如用户登录、操作行为等。企业通过日志审计可满足合规要求(如金融、医疗行业的法规),及时发现安全威胁(如异常登录、数据泄露),并为事故调查提供依据。工具如EventLog Analyzer能帮助企业生成合规报表,确保符合PCI DSS、HIPAA等标准,并支持实时监控与存档分析,保障网络安全与数据隐私。
567 2
|
存储 安全 编译器
快速入门C++17:了解最新的语言特性和功能(下)
快速入门C++17:了解最新的语言特性和功能
|
存储 XML 移动开发
前端大厂面试真题
前端大厂面试真题
|
11月前
|
C++
vs code常见的查找快捷键大全
【11月更文挑战第1天】本文介绍了 VS Code 中的基本查找和替换操作,包括在当前文件中查找(Ctrl + F)、查找替换(Ctrl + H)、查找下一个(F3)和查找上一个(Shift + F3)。还涵盖了在多个文件中查找(Ctrl + Shift + F)和查找替换(Ctrl + Shift + H),以及符号查找相关操作,如转到符号(Ctrl + T)和在文件中查找符号(Ctrl + Shift + O)。这些快捷键和功能帮助用户高效地管理和编辑代码。
1621 2
|
流计算
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
483 0
|
存储 编译器 C语言
strlen函数详解
strlen函数详解
595 2
Makefile中.SUFFIXES的含义
Makefile中.SUFFIXES的含义
327 0
|
存储 JavaScript 数据处理
uniapp获取接口数据并渲染至页面中
uniapp获取接口数据并渲染至页面中
655 0