首页 > 其他分享 >makefile

makefile

时间:2023-03-01 22:33:20浏览次数:51  
标签:文件 gcc OBJ makefile myproject hello

makefile

一、gcc

gcc 是用来编译代码的编译器

编译完后有一些常见的输出文件

.a 静态库(文档)
.c 需要预处理的C语言源代码
.h C语言源代码的头文件
.i 经过预处理后的C语言源代码
.o 目标文件(经过汇编产生)
.s 经过编译后产生的汇编语言代码

编译过程

.c->.i->.s->.o

1、预处理 (.c->.i)

gcc -E hello.c -o hello.i

2、编译(.i->.s)

gcc -s hello.c -o hello.s

3、汇编(.s->.o)

gcc -c hello.c -o hello.o

4、链接(.o->可执行文件)把多个.o链接成一个可执行文件(ELF)

gcc hello.o -o myHello

二、makefile

Linux的过程都是自己可以控制的

在gcc中可以通过将.c文件编译成.o文件

那么如果有多个.c文件呢,这些都要编译成.o文件,这样需要输入多条指令去执行吗?

可以通过 makefile

makefile好处:自动化编译

make命令,需要一个makefile文件

在makefile文件中去告诉make命令需要怎样去编译和连接程序

makefile是一个文件形式的数据库文件,包含一些规则来告诉make处理哪些文件以及如何处理这些文件

makefile规则:

target:depend
command

target:目标,可以是一个中间文件,也可以是最终的执行文件
depend:依赖,指要生成目标文件所需要的文件或目标
command:make需要执行的命令(一定用tab键)

hello.i:hello.c
	gcc -E -o hello.i hello.c	//注意代码前面一定用table隔开

makefile执行顺序:

默认执行第一条,在执行第一条时,先找所有的依赖文件,如果没有,继续往下找有没有脚本能生成这个依赖文件,如果有就会先执行下面生成依赖文件的语句

test:prog.o code.o
	gcc -o test prog.o code.o
prog.o:prog.c 
	gcc -c prog.c -o prog.o
code.o:code.c 
	gcc -c code.c -o code.o

clean:					//clean:伪目标  清除.o文件
	rm -f *.o test

makefile变量:

变量理解为字符串

OBJ = a b c 表示 OBJ 就是 a b c 这三个,不能改变了
OBJ := a b c 表示 OBJ 是 a b c 但可以用 += 再去追加
OBJ += d 表示 OBJ 变量添加了 d 这一个

变量引用:
$(变量名)

OBJ:=myadd.o mysub.o
OBJ+=myproject.o

myProject:$(OBJ)
	gcc $(OBJ) -o myProject
myadd.o:myadd.c
	gcc -c myadd.c -o myadd.o
mysub.o:mysub.c
	gcc -c mysub.c -o mysub.o
myproject.o:myproject.c
	gcc -c myproject -o myproject.o

clean:
	rm *.o myProject

通配符:

通配符:% * ?
	% 	表示任意一个
	* 	表示所有
	? 	表示匹配一个未知的东西

最终代码:

#OBJ:=myadd.o mysub.o
#OBJ+=project1.o

#myproject:$(OBJ)
#	gcc $(OBJ) -o myproject
#*.o:*.c
#	gcc -c *.c -o *.o

#.MYDEL:				//标签,没有实际用处,只是以便区分
#clean:
#	rm -rf *.o myproject


#==================================
#	$@表示目标文件
#	$^表示依赖文件
target=myProject
OBJ:=myadd.o mysub.o
OBJ+=myProject.o

CC:=gcc
CFLAGS:=-c
LIB:=

$(target):$(OBJ)
	$(CC) $^ -o $@	$(LIB)
*.o:*.c
	$(CC) $(CFLAGS) $^ -o $@
	
.MYDEL:			#标签,没有实际用处,只是以便区分
clean:
	rm -rf *.o $(target)




标签:文件,gcc,OBJ,makefile,myproject,hello
From: https://www.cnblogs.com/Mr-black-7/p/17170150.html

相关文章

  • 轻松玩转Makefile | 基础用法
    前言本文通过几个简单的示例,可以快速了解Makefile的基本使用方法,适用于编译我们平时练习所编写的小量代码。1.make命令Makefile文件内容:all为目标,这里没有依赖的文......
  • makefile中PHONY的重要性
       伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过  PHONY来......
  • Makefile入门(超详细一文读懂)
    原文:https://blog.csdn.net/ZBraveHeart/article/details/123187908 1、Makefile编译过程在这里插入图片描述  Makefile文件中的命令有一定规范,一旦该文件编写好以......
  • 【IMX6ULL学习笔记】三、U-BOOT Makefile详解
    00、通识版本号VERSION=2016//主版本号PATCHLEVEL=03 //补丁版本号SUBLEVEL= //次版本号EXTRAVERSION=//附加版本信息NAME= //名字有关的,一般......
  • Makefile Tab键
    https://blog.csdn.net/weixin_44980842/article/details/123167307MakefileTab键 MakefileTab键 MakefileTab键 MakefileTab键......
  • Makefile 注释符
    Makefile 注释符“#字符是注释符,makefile把#字符后面的内容作为注释内容处理(shell、perl脚本也是使用#字符作为注释符)......
  • shell:Makefile从shell脚本中导入变量
    目录​​需求描述​​​​Makefile读取变量​​​​Makefile文件中定义变量​​​​Makefile从shell脚本中导入变量​​​​优先级​​​​1、导入shell中的变量​​​​2......
  • 嵌入式Linux—浅析Makefile
    Makefile文档组织管理程序不使用Makefile的缺点-otesta.cb.c执行过程:a.c文件通过预处理、编译、汇编得到a.o文件b.c文件通过预处理、编译、汇编得到b.o文件a.......
  • ubuntu系统下使用Makefile编译多文件
    认识Makefile什么是MakefileMake:是一个解决大工程编译的工具Makefile:就像是脚本文件一样,里面描述着哪些文件需要编译,哪些需要重新编译,它里面还可以执行系统命令。使用时只......
  • makefile 编写要点
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......