make和makefile入门

gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。

-c只生成目标文件 不进行编译 用于对源文件的分别编译、
(就用到make里 就很必要 分别编译嘛)

-W -WALL显示全部警告 -w不显示警告
大写i
-I就是用来干这个的:告诉gcc去哪里找头文件。
大写L
-L是用来告诉gcc去哪里找头文件的, 那么-L实际上也很类似, 它是用来告诉gcc去哪里找库文件
小写l
-l的作用就是用来指定具体的静态库、动态库是哪个。

gcc分步编译

gcc -E 生成预处理文件(.i)

将头文件展开
预处理阶段 代码错误 不会报错
gcc -E file2.c -o file2.i

gcc -S

将预处理文件编译为汇编文件(机器语言)(.s)
gcc -S file2.i -o file2.s

gcc -c 将汇编文件生成二进制文件

不可执行 只有经过链接后才可以生成可执行文件
gcc -c file2.s -o file2.o

生成可执行文件

gcc file2.o -o file2

make工具 多个项目一步编译 统一管理

通过读入makefile文件的内容进行编译工作
makefile文件不是系统自带的是人为添加的 默认命名为makefile

Makefile基本结构(语法格式)

目标文件:依赖文件
《tab》编译命令

[root@localhost cyuyan]# vi Makefile

file4:file4.c
        gcc file.c -o file4

//调用make工具
[root@localhost cyuyan]# make
gcc file.c -o file4

用makefile分部编译目标文件

[root@localhost cyuyan]# cat Makefile
#file4:file4.c
#	gcc file.c -o file4
file4:file4.o
	gcc file4.o -o file4
file4.o:file4.s
	gcc -c file4.s -o file4.o
file4.s:file4.i
	gcc -S file4.i -o file4.s
file4.i:file4.c
	gcc -E file4.c -o file4.i

[root@localhost cyuyan]# vi Makefile
[root@localhost cyuyan]# rm file4
rm:是否删除普通文件 "file4"?y
[root@localhost cyuyan]# make
gcc -E file4.c -o file4.i
gcc -S file4.i -o file4.s
gcc -c file4.s -o file4.o
gcc file4.o -o file4

.PHONY:clean 标识clean 命令 避免重名发生的错误

在makefile中执行删除操作
在这里插入图片描述想要把生成的文件全部删除掉
在这里插入图片描述

makefile下的自定义变量

[root@localhost cyuyan]# vi Makefile
[root@localhost cyuyan]# make
gcc -E file4.c -o file4.i
gcc -S file4.i -o file4.s
gcc -c file4.s -o file4.o
gcc file4.o -o file4
[root@localhost cyuyan]# cat Makefile
#file4:file4.c
#	gcc file.c -o file4
filezi=file4
$(filezi):file4.o
	gcc file4.o -o file4
file4.o:file4.s
	gcc -c file4.s -o file4.o
file4.s:file4.i
	gcc -S file4.i -o file4.s
file4.i:file4.c
	gcc -E file4.c -o file4.i
clean:
	rm file4.o file4.i file4.s file4

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

extern外部调用或引用函数
prog:a.o b.o c.o d.o assmb.o
gcc a.o b.o c.o d.o assmb.o -L/home/user/lib -lm –o prog
a.o:a.c
gcc –c a.c
b.o:b.c defs.h
gcc -c b.c
c.o:c.c
gcc -c c.c
d.o:d.c defs.h
gcc -c d.c
assmb.o:assmb.s
as -o assmb.o assmb.s
clean:
rm prog *.o

猜你喜欢

转载自blog.csdn.net/faith_girl/article/details/116273391