编写C代码
编辑器:vim,编写.c文件
编译
gcc 源文件 -o 生成可执行文件名

gcc -c:只编译,不链接,生成.o文件
make工具和Makefile文件
make工具:GNU make,是一个文件,用于将源代码编译为可执行的二进制文件
Makefile:make工具使用的文件,指明编译和链接规则
使用gcc编译多个文件时,每次编译都需要重新全部编译、链接,文件多的时候效率很低
需要一个工具
- 如果工程没有编译过,那么所有
.c文件都被编译、链接成可执行文件 - 如果工程中只有若干
c文件被修改,那么编译这些被修改的即可 - 如果头文件被修改,那么编译所有引用这个头文件的
c文件,并且链接
例如以下多个文件:





工程里增加一个Makefile文件
- 名字必须是
Makefile - 格式。命令前必须是
Tab
目标文件:来源文件
命令
...
...
clean:
清除命令

使用make命令,编译。最后make clean,清理编译出的文件

Makefile基本语法
1. 规则格式
目标文件... : 依赖文件集合...
命令1
命令2
....
所有规则中,第一条的目标为默认目标,只要默认目标更新,那么就认为Makefile的工作,完成整个Makefile就是为了完成这个工作
2. Makefile变量
只有字符串格式
- 使用变量:
$(变量名)
objects = main.o input.o caclcu.o
main : $(objects)
一些符号
=:相当于起别名,会使变量一直跟踪变化
a = name
b = $(a)
a = name1
// 此时b=name1
:=:相比于=,不会使用后面定义的变量,上例结果会是b=name?=:如果前面没有赋值,那么赋值,否则使用前面的+=:字符串末尾追加
3. 模式规则、自动化变量
通配符:%。例如一系列main.o : main.c可以换成一条%o : %.c
命令中必须配合自动化变量使用。
$@:规则中的目标集合$<:依赖文件集合中的第一个文件,如果依赖文件是模式定义的(%),那么就是符合模式的一系列文件集合$^:所有依赖文件的集合,用空格分开
4. 伪目标
例如上面的例子,clean没有依赖文件,make clean总是会执行,但如果工程下有clean文件,那么就出问题了,需要声明为伪目标
.PHONY : 伪目标名
.PHONY : clean
clean:
rm *.o
rm main



















