终端自己也自带编译按键。如图:
我们可以看到使用make命令+想要的运行文件,会自动调用系统自带的cc编译器生成该文件,但是规则是自能成.c文件生成文件,即hello.c–>hello其他的就做不到了。这是因为系统默认一个make文件存在,我们也可以自己编写makefile文件。
例如我想把hello.c文件编译成hello文件,你就可以自己创建一个makefile文件,并在里面写下几行命令:
保存退出,输入make命令:
我们可以看到,它直接给我们进行了gcc命令,并生成了hello文件,正如我们在make文件里面所写的命令。有人会觉得这是多此一举,直接gcc编译不是更省事。
对于一个文件来说可能不用makefile更省事,但是对多个文件编译来说,makefile绝对是超级省事的,我们可以在里面输入我们的编译规则,比如把当前目录的所有.c文件编译。如果你是一个个去编译,那么有多少个文件你就要写多少个命令,而我们只要输入make就行。具体参考图:
我的makefile文件里面的内容可能会出乎初学者的想象:
下面来详细介绍下makefile:
1个规则:
目标:依赖条件
1.你生成的目标时间必须晚于依赖条件的目标否则更新文件,这也就可以使程序用不用每次make都make所有文件。
2.依赖条件如果不存在,将会向下寻找新的条件产生依赖条件:
例如:
`
hello:hello.o //我们只有hello.c文件
gcc hello.o -o hello
hello.o:hello.c
gcc hello.c -c hello.c`
`
2个函数:
- src=$(wildcard *.c): 默认把当前目录下的所有.c文件组成表传给src,你也可以修该文件路径。
- target=
(
p
a
t
s
u
b
s
t
(patsubst %.c,%.o,
(patsubst(src)): 默认把src里的所有.c文件替换为.o文件,你也可以替换为想要的文件比如就是原名%,具体要看你的需求。
补充:
all:$(target) 设置最后生成的目标
clean:-rm -rf $(target) 一键清理所生成的目标
.PHONY: 生成伪目标,不会被系统函数干扰,比如系统自带clean函数
3个自动变量:
$<:规则第一个依赖条件
$^:规则所有依赖条件
$@:规则目标(注意:只能出现在依赖条件中)
学会利用makefile后,可以很方便地扩展你的程序。