在 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 $< -gclean:rm -rf $(TARGET) $(OBJS)

解释一下:

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

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

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

关于 Makefile 的更多内容,请查阅相关文档:

  • http://download.csdn.net/detail/luckydarcy/9923050
  • http://download.csdn.net/detail/luckydarcy/9923052

万能 Makefile 模板相关推荐

  1. 万能makefile深入浅出 - 第四篇

    1. 本示例演示的是编译多个可执行程序,库文件,需链接动态库静态库,且需先编译库,并且库与库之间,可执行程序之间皆存在依赖关系的makefile的编写方式(自己写的简单动态库编译和使用,自己写的简单静 ...

  2. 万能makefile深入浅出 - 第三篇

    1. 本示例演示的是需链接动态库静态库,且需先编译库的makefile的编写方式(自己写的简单动态库编译和使用,自己写的简单静态库的编译和使用) 2. 目的是帮助那些新接触makefile的新手如何快 ...

  3. 万能makefile深入浅出- 第一篇

    1. 本示例演示的是最简单的,即只需编译源文件,不需链接库的makefile的编写方式 2. 目的是帮助那些新接触makefile的新手如何快速写出可用的makefile,下载本例后完全可以稍作修改就 ...

  4. 万能makefile深入浅出 - 第二篇

    1. 本示例演示的是需链接动态库静态库,但不需编译库的makefile的编写方式(动态库是jsoncpp的使用,静态库是tinyxml的使用) 2. 目的是帮助那些新接触makefile的新手如何快速 ...

  5. 初中教师资格证计算机试讲教案模板,教案模板:教师资格证面试初中英语万能教案模板...

    [摘要] 授课是一门艺术,好的授课方式可以使学生举一反三,培养学生自主学习能力.此时,课前的教案准备工作就极为重要.那么如何写出一篇好的教案呢?考必过为大家精心整理了教案模板:教师资格证面试初中英语万 ...

  6. 一个适用各类场合的Makefile模板

    1.写在前面 对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了"一键编译",编码完成后只需一个操作即可完成编译.链接.生成目标文件.Linu ...

  7. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  8. 一个STM32编译Makefile模板

    最近突然对STM32感兴趣,研究了一下.STM32的编译方式非常多,由于一直对gcc情有独钟,所以还是喜欢使用Makefile+gcc编译的方法.当时从51单片机转向AVR单片机开发时,也是通过这种方 ...

  9. Makefile模板的继续改进

    layout: post title: category : linux系统 tags : [Makefile] 上一文章的Makefile,存在一个比较大的问题,那就是生成可执行的二进制文件时,会链 ...

最新文章

  1. Java项目:考试管理系统(java+Springboot+Maven+Jpa+Vue+Mysql)
  2. clover configurator_枯木逢春,用Clover让老电脑从NVME SSD启动 再用叁年没问题
  3. 如何写好一份简历-校招篇
  4. 【大会】QoE也能驱动业务创新
  5. opencv读取视频并保存为图片
  6. Lisenter笔记
  7. 区分 JSON 字符串与JSON对象
  8. (4)JavaScript之alert语句
  9. python3程序运行中会跳过注释行_[python] 去除代码源文件中单行注释
  10. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)
  11. php 和new date,将JavaScript new Date()转换为php DateTime()
  12. 无线通信中各种常用技术及特点
  13. java soap服务_「java调用webservice」java调用webservice接口 三种方法 - seo实验室
  14. 【2022PMP最全总结-敏捷专题课】
  15. 图形验证码文字识别——pytesseract
  16. 服务器安装与维护,服务器安装与维护 PPT课件
  17. Android OpenCV实现文字识别
  18. 国仁老猫:怎么制作抖音100W播放量的作品;首选需要精准定位。
  19. 自动驾驶 11-3: 根据 LIDAR 数据进行位姿估计 Pose Estimation from LIDAR Data
  20. 全志t3linux驱动_全志T3 Linux显示驱动分析

热门文章

  1. 利用短信商务通进行短信商务
  2. 中信银行上线票付通产品 为电商打造专属电票服务
  3. 从零开始-自动化立体库设计与计算
  4. vaex库使用方法python_Python秒开100G数据是怎么办到的?
  5. 关于App置灰黑白化的探索
  6. Time.deltaTime 用法
  7. Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析
  8. 位、比特(bit)、字节(Byte)区别与关系
  9. 用java编写博弈树_MathorCup竞赛优秀论文基于MonteCarlo局面评估和UCT博弈树搜索的...
  10. 计算机专业中国十大名校最新排名,中国最顶尖的十所大学 中国十大名校排名...