在文件夹(包含sub.c add.c main.c common.h )下输入make命令进行编译,输入make clean 命令清除.o等文件;
makefile文件示例:(其中命令皆以输入Tab键开头)
#变量
OBJS = sub.o add.o main.o
CC = gcc
CFLAGS = -Wall -O -g
要生成的文件:生成文件所需要的文件
生成文件执行的命令
common : $(OBJS)
$(CC) $(OBJS) common.h -o common
sub.o : sub.c
$(CC) $(CFLAGS) -c sub.c -o sub.o
add.o : add.c
$(CC) $(CFLAGS) -c add.c -o add.o
main.o : main.c
$(CC) $(CFLAGS) -c main.c -o main.o
clean:
rm -rf *.o common
进阶:
#@目标文件,^所有依赖的文件,<第一个依赖的文件
SRCS = $(wildcard *.c)
#检测文件夹下所有的.c文件,SRCS的值就是当前面目录下面所有的以.c结尾的源文件
OBJS = $(SRCS:.c=.o)
#变量OBJS的值就是将SRCS里面所有.c文件编译出的.o目标文件
CC = gcc
#变量CC代表我们要使用的编译器
INCLUDES = -I/home/noah/build_sqlite3/include
LIBS = -L/home/noah/build_sqlite3/lib -lsqlite3
#指定除了编译器默认的头文件和库文件的路径之外需要额外引用的头文件路径以及库的路径
CCFLAGS = -g -Wall -O0
#CCFLAGS变量存放的是编译选项
my_app : $(OBJS)
$(CC) $^ -o $@ $(INCLUDES) $(LIBS)
%.o : %.c
$(CC) -c $< $(CCFLAGS)
clean:
rm *.o
重写上边的makefile:
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
CC = gcc
CCFLAGS = -g -Wall -O0
common : $(OBJS)
$(CC) $(CCFLAGS) $^ -o $@
%.o : %.c
$(CC) -c $< $(CCFLAGS) -o $@
clean:
rm *.o common