万能 Makefile 模板

网友投稿 763 2022-10-25

万能 Makefile 模板

万能 Makefile 模板

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

CC=gccSRCS=$(wildcard *.c */*.c)OBJS=$(patsubst %.c, %.o, $(SRCS))FLAG=-gNAME=$(wildcard *.c)TARGET=$(patsubst %.c, %, $(NAME))$(TARGET):$(OBJS) $(CC) -o $@ $^ $(FLAG)%.o:%.c $(CC) -o $@ -c $< -gclean: 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行​​$(TARGET):$(OBJS)​​ 表示由 .o 文件链接成可执行文件。注意第9行前面是一个​​​​​ 键,而​​$@​​​ 表示目标,也就是​​$(TARGET)​​​,​​$^​​​ 表示依赖列表,也就是​​$(OBJS)​​ 。第11行​​%.o:%.c​​ 表示由 .c 文件生成 .o 文件。第12行中的​​$<​​ 表示搜索到的第一个匹配的文件。第14行的 clean 是伪目标(.PHONY),它不需要依赖,执行​​make​​​ 命令时是不会执行的,当执行​​make clean​​ 时才会执行。

另外,Makefile 的赋值除了使用等号(=),还可以使用 ​​:=​​​ 、​​+=​​​ 、​​?=​​ 符号。具体含义如下:

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MobileNet-YOLO 检测框架的一个caffe实现
下一篇:XDroid 轻量级的Android快速开发框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~