更加详细的makefile教程, https://blog.csdn.net/ruglcc/article/details/7814546

1 make

gcc - 编译器, 按照某种规则编译你的代码

make - linux自带的构建器

  • 构建的规则在makefile中

2 makefile文件命名

  • makefile
  • Makefile

3 makefile中的规则

gcc a.c b.c c.c -o app 这个命令如何转化为makefile中的规则呢

分为三部分: 目标, 依赖, 命令

目标:依赖
(tab缩进)命令
转化-------------------------------------->
app:a.c b.c c.cgcc a.c b.c c.c -o app

makefile中可以有多条规则

执行make 就可执行makefile中的命令


4 makefile的编写

4.1 第一个版本

缺点: 效率低, 修改一个文件, 所有文件会被全部重新编译

4.2 第二个版本

工作原理:

  • 检查文件是否存在, 向下搜索下边的规则, 如果有规则是用来生成查找的依赖的, 执行规则中的命令
  • 依赖存在, 根据目标和依赖的生成时间的对比, 判断是否进行更新, 原则是目标的时间>依赖的时间, 否则进行更新

缺点: 冗余

4.3 第三个版本

  • 自定义变量: obj=a.o b.o c.o,

    obj=10

    变量的取值: aa=$(obj)

  • makefile自带的变量: 大写

    CPPFLAGS

    CC

  • 自动变量 只能在命令中使用

    • $@ : 规则中的目标
    • $< : 规则中的第一个依赖
    • $^ : 规则中所有的依赖

    模式匹配: %.o:%.c

    第一次: main.o没有, main.o:main.c

    依次进行

    可移植性差

4.4 第四个版本

makefile中所有函数都有返回值

  • 查找指定目录下指定类型的文件wildcard, 例src=$(wildcard ./*.c)

  • 匹配替换patsubst, 例obj=$(patsubst %.c, %.o, $(src)), 表示用.o去替换src中所有.c的文件, 注意使用百分号%

  • 缺点: 不能清理项目

4.5 第五个版本

编写清理项目的规则

# 在makefile中定义
.PHONY:clean # 声明伪目标, 防止被更新
clean:[-]rm $(obj) $(target) [-f]
# - 可选, 表示当前命令执行失败忽略, 继续向下执行
# -f 可选, 表示强制删除

就可以在终端执行make clean

Linux编程(6)_makefile相关推荐

  1. Linux编程题:信号量同步三进程依次打印若干次ABC

    三个进程依次打印ABC..... 思路及大致流程如下: 思路取自这位大哥: Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客 这位大哥写的是线 ...

  2. linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf

    Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...

  3. Linux 编程经典书籍推荐

    成为一名精通 Linux 程 序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 ...

  4. linux的编程命令,linux编程常用命令

    学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...

  5. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

  6. 学习Unix/Linux编程要学些什么

    最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...

  7. Linux编程下open()函数的用法

    Linux编程下open()函数的用法 open(打开文件)  相关函数:  read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...

  8. 嵌入式linux内核oops,Linux编程时遇到Oops提示该如何排查?

    各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了"Oops"提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种 ...

  9. Linux编程获取网络信息总结

    Linux下C获取所有可用网卡信息 在Linux下开发网络程序时,经常会遇到需要取本地网络接口名.IP.广播地址 .子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR. ...

最新文章

  1. [MySQL Reference Manual] 7 备份和恢复
  2. PDF与doc格式互换
  3. php 时间函数详解,PHP时间函数date()详解
  4. lda主题词评论python_Python之酒店评论主题提取LDA主题模型
  5. 编译py-faster-rcnn全过程
  6. windows下编译firefox
  7. Linux下搭建 kafka集群 + zookeeper集群部署 安装、启动、停止
  8. Vue之路由push
  9. c语言如何引用一维数组,C语言一维数组的定义和引用
  10. Onenote 安装GEM 插件 失败~修复
  11. 秩和比综合评价法(RSR)详解及Python实现和应用
  12. Charles 破解版安装
  13. 如何用PS缩小图片而清晰度不变?
  14. iomega ix2 Android,Lenovo Iomega ix2系统安装
  15. Vuex--mapState, mapGetters, mapActions, mapMutations--使用/教程/实例
  16. 解决php加载慢的一个办法
  17. B2C购物车功能应该怎么设计,以及我的设计构思分析
  18. 《赵成的运维体系管理课》学习笔记(3)——云计算时代的运维实践
  19. linux中的manifest的作用,Manifest用途
  20. 以下哪款工具不能编译c语言,哪款C语言编译器(IDE)适合初学者?

热门文章

  1. 使用Github官方提供的gitignore过滤Git提交的文件
  2. php用魔术方法__call实现类函数重载
  3. [转载]Dynamic Database Switching in Rails - How to do it
  4. sql server数据表转换成xml
  5. 多线程编程(1) - 认识等待函数 WaitForSingleObject
  6. 白话设计模式--结构型模式之 适配器模式(Adapter)
  7. 原生node写一个静态资源服务器
  8. 内核开发知识第二讲,编写Kerner 程序中注意的问题.
  9. [BUAA OO]第三次博客作业
  10. Thinking in Java Reading Note(5.初始化与清理)