<c语言核心技术>Makefile学习:
关于两个文件的makefile:
CC=gcc
CFLAGS = -Wall -g -std=c99
LDFLAGS = -lm
circle:circle.o circulararea.o
$(CC) $(CFLAGS) -o $@ $^
circle.o:circle.c
$(CC) $(CFLAGS) -o $@ -c $<
circulararea.o:circulararea.c
$(CC) $(CFLAGS) -o $@ -c $<
***********************************************************
格式如下:
目标:前提
命令
$@:目标
$^:前提
$<:展开成一个前提
****************************************************************
脚本命令:
当make引用一个规则以建立目标时,此规则中每一行命令都分别以独立的shell实例被分别执行。
*****************************************************
模式规则:
circle.o:circle.c
$(CC) $(CFLAGS) -o $@ -c $<
circulararea.o:circulararea.c
可以做如下的一个提换:$(CC) $(CFLAGS) -o $@ -c $<
circulararea.o circle.o:%.0:%.c
$(CC) $(CFLAGS) -o $@ -c $<
也可以如下写:
%.o:%.c
$(CC) $(CFLAGS) -o $@ -c $<
***********************************************************
后缀规则:
.c.o:
$(CC) $(CFLAGS) -o $@ -c $<
比较老了.
**********************************************************
内置规则:
CC=gcc
CFLAGS = -Wall -g -std=c99
OBJ = circle.o circularea.o
circle:$(OBJ) -lm
*********************************************************
隐式规则链:
目标不具有明显的规则,并带有命令脚步,则make会试着使用隐式规则。从纵多的规则中选一个最先合要求的。
如当前目录只有一个square.c文件:
makefile:
%:%.o
cc -o $@ $^
%.o:%.c
cc -c -o $@ $<
如果中间对象没有在,makefile或命令行中被提及,在最后会自动的清除中间对象文件。
**********************************************************
双冒号规则:
目标::前提
命令
二择一执行:分别测试目标和每一个规则的前提,以决定是否执行此规则的脚本。
**********************************************************