Makefile实例

Makefile实例

对依赖进行改进

gcc -M c.c // 打印出依赖

gcc -M -MF c.d c.c  // 把依赖写入文件c.d

gcc -c -o c.o c.c -MD -MF c.d  // 编译c.o, 把依赖写入文件c.d

修改Makefile如下:

objs = a.o b.o c.o
dep_files := $(patsubst %, .%.d, $(objs))
dep_files := $(wildcard $(dep_files))

test: $(objs)
	gcc -o test $^

ifneq ($(dep_files), )
include $(dep_files)
endif

%.o: %.c
	gcc -c -o $@ $< -MD -MF .$@.d

clean:
	rm *.o test

distclean:
	rm $(dep_files)

.PHONY: clean
  1. 首先用obj变量将.o文件放在一块。
  2. 利用函数,把obj里面所有的文件都变为 .%.d格式,并用变量 dep_files表示。
  3. 利用 wildcard函数,判断 dep_files是否存在。
  4. 然后目标test依赖所有的 .o 文件。
  5. 如果dep_files变量不为空,就将其包含进来。
  6. 然后就是所有的.o文件都依赖.c文件,且通过-MD -MF生成.d依赖文件。
  7. 清理所有的.o文件和目标文件
  8. 清理依赖.d文件。

CFLAGS

工作中,我们希望把警告也当成错误来处理

CFLAGS = -Werror -Iinclude

…………


%.o : %.c
	gcc $(CFLAGS) -c -o $@ $< -MD -MF .$@.d

除了编译参数-Werror,还可以加上-I参数,指定头文件路径,-Iinclude表示当前的inclue文件夹下。

此时就可以把c.c文件里的#include ".h"改为#include <c.h>,前者表示当前目录,后者表示编译器指定的路径和GCC路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值