第一版
目标:依赖
命令
#命令前是tab键
test:main.o utils.o
gcc -o main.o utils.o -lm
main.o:main.c
gcc -c main.c -lm
utils.o:utils.c
gcc -c utils.c -lm
#-lm是因为程序里用了math.h
========================================
第二版
常见的自动变量
$@:目标
$^:依赖的不重复全部项
$<:依赖的第一项
$*:不包含扩展名的目标文件名称
$+:所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$?:所有时间戳比目标文件晚的依赖文件,并以空格分开
$%:如果目标是归档成员,则该变量表示目标的归档成员名称
test:main.o utils.o
gcc -o $@ $^ -lm
main.o:main.c
gcc -c $^ -lm
utils.o:utils.c
gcc -c $^ -lm
===============================================================
第三版
.c.o表示所有的 .o文件都是依赖与相应的.c文件
test:main.o utils.o
gcc -o $@ $^ -lm
.c.o :
gcc -c $< -lm
===================================================================
第四版
常见的预定义变量
AR 库文件维护程序的名称,默认值为ar
AS 汇编程序的名称,默认值为as
CC C编译器的名称,默认值为cc
CPP C预编译器的名称,默认值为$(CC) –E
CXX C++编译器的名称,默认值为g++
FC FORTRAN编译器的名称,默认值为f77
RM 文件删除程序的名称,默认值为rm –f
ARFLAGS 库文件维护程序的选项,无默认值
ASFLAGS 汇编程序的选项,无默认值
CFLAGS C编译器的选项,无默认值
CPPFLAGS C预编译的选项,无默认值
CXXFLAGS C++编译器的选项,无默认值
FFLAGS FORTRAN编译器的选项,无默认值
CC = cc
CFLAGS = -O
CFILES = *.c
LIBS=-lm
test:main.o utils.o
$(CC) -o $@ $^ $(LIBS)
.c.o :
$(CC) -c $< $(LIBS)
最后需要加上clean
scratch:
make test
#clean无法执行的时候添加这个
make clean
test:main.o utils.o
gcc -o $@ $^ -lm
.c.o :
gcc -c $< -lm
#.PHONY:伪目标,不产生目标文件的意思
.PHONY: clean
clean:
rm -f *.o