一、通用形式@1
target = app
src = $(wildcard *.c)
obj = $(patsubst %.c, %.o, $(src))
CC = gcc
CPPFLAGS = -I ./head
CFLAGS = -Wall -g
DFLAGS =
$(target):$(obj)
$(CC) $(DFLAGS) $^ -o $@
%.o:%.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
clean:
-rm -rf $(obj)
distclean:
-rm -rf $(obj) $(target)
.PHONY:clean distclean
说明:还有很多参数没有定义,其实Makefile还有很多很复杂的写法,很多Makefile看起来都比较复杂,但是其
中的语法应该都是类似的。真正的项目的Makefile都比较复杂,所以以后工作了好好学习下。
二、通用形式@2
target = app
src = $(wildcard *.c)
obj = $(src: .c=.o)
all:
gcc -g -Wall $(obj) -o $(target)
clean:
-rm -rf *.o $(target)
.PHONY:clean
三、通用形式@3
四、 相关小记:
/*Mafile*/
target = app
src = $(wildcard *.c)
obj = $(patsubst %.c, %.o, $(src))
CC = gcc
CPPFLAGS = -I ./head
CFLAGS = -Wall -g
DFLAGS =
$(target):$(obj)
$(CC) $^ -o $@
computer:
make -C computer
%.o:%.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
clean:
-rm -rf $(obj)
distclean:
-rm -rf $(obj) $(target)
.PHONY:clean distclean computer
2. 静态模式规则,隐式规则
隐式规则 如果写的像这样: all:$(obj) 工具默认去make数据库去找对应规则满足你的要求
静态模式 如果这样: $(target):%.o:%.c
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@
akaedu@akaedu-desktop:~/test/student$ make -p > log //输出重定向,查看相关隐式规则信息
akaedu@akaedu-desktop:~/test/student$ ls
app log Makefile student_sort.c student_sort.o
akaedu@akaedu-desktop:~/test/student$ vim log
3.关于Makefile中命令行参数的使用方法;关联G:\FORGOTTON\for面试\demo_c\file
『
like:
var1 =
var2 =
go:
./$(target) $(var1) $(var2)
Using:make go var1=file1.txt var2=file2.txt
』
阅读(427) | 评论(0) | 转发(0) |