1.概要
一步步的理解makefile
2.代码
makefiel 命令原型
#target...:prerequisites...
#command
#原型
目标:依赖
命令
#举例
西红柿炒鸡蛋(最终要生成的东西):西红柿 鸡蛋(需要的原材料)
炒(动作)
------------------------
test :main.c sub.c add.c
gcc main.c add.c sub.c
------------------------------
test:main.o add.o sub.o
gcc main.o sub.o add.o -o test
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
------------------------------
test:main.o add.o sub.o
gcc main.o sub.o add.o -o test
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
.PHONY:clean
clean:
rm *.o
------------------------------
all:test test1
test:main.o add.o sub.o
gcc main.o sub.o add.o -o test
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
.PHONY:clean
clean:
rm *.o
------------------------------
SRC = main.o add.o sub.o
test:$(SRC)
gcc $(SRC) -o test
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
.PHONY:clean
clean:
rm *.o
--------------------
#SRC ?= main.o 第一个有效
#SRC := main.o 最后一个有效
#SRC += main.o 全部有效
#$^ 所有不重复的目标依赖文件,以空格分开
#$@ 目标文件的完整名称
SRC = main.o add.o sub.o
test:$(SRC)
gcc $^ -o $@
main.o:main.c
gcc $^ -o $@
add.o:add.c
gcc $^ -o $@
sub.o:sub.c
gcc $^ -o $@
.PHONY:clean
clean:
rm *.o
--------------------------
#wildcard $(wildcard PATTERN...)//功能是匹配一个文件
#patsubst 语法:$(patsubst <pattern>,<replacement>,<text>)//含义:把text里面的pattern格式的内容替换成replacement内容。
#wildcard *.c 的含义是:找到所有的.c文件。
#patsubst %.c ,%.o,$(SRC)的含义是:把所有的.c文件替换成.o文件。
#CC 解释:C编译器的名称,默认值为gcc。
#CFLAGS c编译器的选项,无默认值。
#CFLAGS = -c -Wall -g -I include 解释: Wall 产生更多的警告, -g 是 GDB 调试
SRC = $(wildcard *.c)
OBJ = $(patsubst %.c,%.o,$(SRC))
CFLAGS = -c -Wall -g -I include
test:$(OBJ)
$(CC) $^ -o $@
%.o:%.c
%(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
rm *.o
--------------------------
引用: