喜羊羊系列之makefile

博客地址:http://blog.csdn.net/muyang_ren

附件一:

一个可以编译文件夹内所有的C文件或指定编译某一C文件的简单makefile

使用方式1、编译所有的c文件时,只需要在文件夹下make一下,

使用方式2、只编译对应的c文件,使用:make 对应的生成文件名(不带c后缀的,但要对应有相应的c文件依赖)

使用方式3、删除可执行文件和隐藏的垃圾文件:make clean


   CC = gcc
   CFLAGS = -Wall -g -O0
   SRC = ${wildcard *.c}
   OBJS = ${patsubst %.c,%,$(SRC)}
   
   all:$(OBJS)
   
   %:%.c
           $(CC) $(CFLAGS) $^ -o $@
  
  clean:
          @$(RM) $(OBJS)  .*.sw?          # .*.sw?是一种隐藏的文件

CC(预定义变量):是编译器变量,没指定时使用系统默认cc编译器,这里指定使用gcc,

CFLAGS(预定义变量):C编译器的选项,没设置时默认无选项,这里放了三个选项

-Wall :打开所有语法警告;
-g:添加可gdb调试;
-O0:这里是大写字母O和数字0,这个是使程序的优化度高一点,不过会使编译链接过程的时间更长点,小程序可以忽略时间问题,而起到优化代码的作用;

wildcard函数:获取某种文件的文件名;使用wildcard  *.c的写法可以获取当前文件内所有c文件的文件名,带文件后缀;

SRC:用户自定义的变量,用来去存储wildcard 获取到的文件名(带后缀)集合

patsubst函数:实现将文件后缀修改的函数,pastubst  %.c ,%,$(SRC)  则是将变量SRC中的.c文件名集转换成不带.c文件名(不带后缀)

OBJS:用户自定义变量,存储patsubst函数转换的文件名集。

all是个伪目标,因为下面没有直接跟着一个命令,依赖着OBJS中的文件名集

%:是个通配符,代表着依赖文件传递下来的内容,这里指的是文件名集。

%:%.c:也就是不带后缀的目标文件都是依赖同名带后缀的文件生成的

$():是个取变量值的运算

$^:代表着%.c传递下来的所有依赖文件

$@:代表生成的目标文件

那么可以知道:$(CC) $(CFLAGS) $^ -o $@  

表达的是:gcc -Wall -O0 ( 当前文件下c文件名为目标文件名) -o (当前文件下的所有点c文件)


clean:是用户自定义的一个命令,clean的名字可以改,命令在下行,主要是实现删除指定的文件

$(RM) $(OBJS)  .*.sw? 

RM:是系统变量,直的是系统命令rm,OBJS也就是当前文件夹下的c文件对应的没后缀名的生成文件。

.*.sw?  则是当前目录下隐藏文件并且以sw?结尾的文件,?是指任一字符。vi的不正当关闭就会生成这种文件。


附件二:

#自动编译多个.c构成的项目,即把所有的.c编译成同一个可执行文件
CC:=gcc
CFLAGS:=-Wall -g -lpthread
SRC:=${wildcard *.c} #将当前目录下的以.c为后缀的文件名赋给SRC
OBJ:=${patsubst %.c,%.o,$(SRC)}#将Src中以.c为后缀的字符串替换成.o为后缀赋给OBJ

test:$(OBJ) 
	$(CC) -o $@ $^ $(CFLAGS)


%.o:%.c myhead.h
	$(CC) -o $@ -c $< $(CFLAGS) 

.PHONY:clean print
clean:
	@rm -f *.o test .*.sw?
print:
	@echo $(SRC)
	@echo $(OBJ)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值