一个Makefile模板

添加链接描述

在 Linux 编程时,对于很多小工程来说,很多时候似乎没有必要用 autoconf 和 automake 工具来生成 Makefile,反而自己写一个 Makefile 更省事。这里给大家提供一个简单的 Makefile 模板,根据需要作相应修改,可以适用于很多小项目。

CC=gcc
SRCS=$(wildcard *.c */*.c)
OBJS=$(patsubst %.c, %.o, $(SRCS))
FLAG=-g
NAME=$(wildcard *.c)
TARGET=$(patsubst %.c, %, $(NAME))

$(TARGET):$(OBJS)
	$(CC) -o $@ $^ $(FLAG)

%.o:%.c
	$(CC) -o $@ -c $< -g

clean:
	rm -rf $(TARGET) $(OBJS)

解释一下:

第1行指定编译器为 gcc,可以根据需要修改为 g++ 或者 arm-linux-gcc 等交叉编译工具链。
第2行是为了获取匹配模式的文件名,.c 表示当前工程目录的 c 文件,/*.c 表示所有下一级目录的 .c 文件。
第3行是将 $(SRCS) 中的 .c 文件替换成 .o 文件。
第4行用于指定编译选项,根据需要添加,比如 -g、-ml、-Wall、-O2 等等。
第5、6行,同样使用了 wildcard 和 patsubst 函数来处理,目的是为了指定最终生成的可执行文件名。
第8行 ( T A R G E T ) : (TARGET): (TARGET):(OBJS) 表示由 .o 文件链接成可执行文件。
注意第9行前面是一个 键,而 $@ 表示目标,也就是 ( T A R G E T ) , (TARGET), (TARGET)^ 表示依赖列表,也就是 $(OBJS) 。
第11行 %.o:%.c 表示由 .c 文件生成 .o 文件。
第12行中的 $< 表示搜索到的第一个匹配的文件。
第14行的 clean 是伪目标(.PHONY),它不需要依赖,执行 make 命令时是不会执行的,当执行 make clean 时才会执行。
另外,Makefile 的赋值除了使用等号(=),还可以使用 := 、+= 、?= 符号。具体含义如下:

:= 表示简单赋值(注意右边的 $ 值只会向上寻找)
+= 表示追加赋值
?= 表示判断赋值(判断左边是否已经定义过,如果是则忽略本次赋值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值