makefile(详细讲解)

2023-05-16

目录

  • 1.makeflie
  • 2.多个文件执行makefile

1.makeflie

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
我们使用makefile就在当前目录下创建makefile/Makefile前单字母大写小写都可以。
makefile里面会有什么东西呢?
makefile里面会有依赖关系
依赖关系 :比如有个可执行文件test,但是想有它就要有test.c这个就叫做依赖关系,而使用test.c形成test这个就叫依赖方法
了解了这个我们就来正式使用makefile
在马克file输入下面代码,注意第二行不是用空格,一定要用TAB键
在这里插入图片描述
我们再把mytest.c文件给写上
在这里插入图片描述
这个时候我们就可以直接make,再运行make生成的可执行文件运行就行了
在这里插入图片描述

但是我们想要清理文件怎么办
vim makefile
在这里插入图片描述
改成那样就可以了.PHONY这是一个伪目标
输入 make clean就可以清除mytest可执行文件了
在这里插入图片描述
而至于为什么默认make是会执行make mytest而不是make clean是因为make mytest在上面,因为它是从上往下默认形成的
.PHONY:相当于makefile的语法格式中的一个关键字
比如clean被.PHONY修饰时,表明:总是被执行的
那么我们先来了解下总是不被执行的,比如下面的make 因为生成了mytest
所以接下的make除了第一次创建以外都会报错
在这里插入图片描述
而总是被执行就不会有这种问题,想执行多少次就执行多少次
在这里插入图片描述
但是它是怎么区分目标文件的新旧的
在这里插入图片描述
Access表示读取或者进入的时间
再了解下面二个,我们先回忆下文件 = 内容加属性
Modify表示内容变了的时间
Change表示属性变了的时间
看下面图片我们只改变了属性,可以看到只有change时间变了
在这里插入图片描述
但是这里要注意修改了内容,可能会改变属性,因为改变了内容,大小可能会发生变化
那么我们现在就来证明,因为旧文件比新文件生成的旧那么就不生成
在这里插入图片描述
那么我们来用touch来改下Modiy的更新时间看看make会不会成功,我们不改原代码
在这里插入图片描述
可以看到重新生成了

2.多个文件执行makefile

依次创建以下文件
test.c

#include"test.h"


void show()
{
  printf("hello hello hello \n");
}

test.h

#include<stdio.h>


extern void show();

main.c

#include"test.h"

int main()
{
  show();
  return 0;
}

makefile文件

hello:main.o test.o
		gcc -o hello main.o test.o
main.o:main.c
		gcc -c main.c -o main.o
test.o:test.c
		gcc -c test.c -o test.o
.PHONY:clean
clean:
		rm -f *.o hello

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

makefile(详细讲解) 的相关文章

随机推荐

  • Visual Studio 与Visual C++ 有什么区别

    Visual C 43 43 是 Visual Studio的一个部分 xff0c 此外还有 Visual Basic xff08 VB xff09 Visual C 等 VC 43 43 6 0 是VS6的 VC 43 43 2003 是
  • STM32Cube的串口设置(一)即学即用

    串口系列 STM32Cube的串口设置 xff08 一 xff09 即学即用 STM32Cube的串口设置 xff08 二 xff09 一个串口接收另一个串口发送 串口实战 STM32Cube的串口实战 xff08 一 xff09 GPS
  • C++中构造函数后面接单冒号是什么意思?

    构造函数后 xff0c 接单冒号表示初始化列表 具体形式为 对于class TEST xff0c 存在成员变量int a b c 那么 TEST int x int y a x b y c 0 的效果就是用括号内的值 xff0c 来初始化成
  • 训练神经网络中最基本的三个概念:Epoch, Batch, Iteration

    转载地址 xff1a https zhuanlan zhihu com p 29409502 原作者 xff1a Michael Yuan 作者主页 xff1a https www zhihu com people mikeyuan 今天让
  • 使用makefile编译freeRTOS

    freeRTOS的文件结构 FreeRTOS LabsFreeRTOS Plus 包含freeRTOS 43 的组件和demo项目FreeRTOS 包含内核和demo项目 Source目录 xff1a 三个必须文件list c queue
  • 2013 一路走过

    2013 一路走过 想起当初找工作的时候 xff0c 一个人早上坐火车跑到其他大学的招聘会上去逛一圈 xff0c 了解招聘情况 然后下午又坐火车回学校 记得那天我投了十几份简历出去 xff0c 本打算投着试试 xff0c 没想到回来后有几家
  • 编译vs2008的samples程序总是跳过

    编译vs2008的samples程序总是跳过 xff0c 要配置属性还显示 未能完成操作 未指定的错误 的解决办法 作者 admin 分类 开发问题 发布时间 2013 03 12 09 22 974 浏览数 6 没有评论 文章转自王牌软件
  • MFC 用户界面线程:界面线程的退出 窗口关闭的流程

    原文链接 xff1a http wenku baidu com link url 61 6CFkWbLOeFgNoUsJniCX3ksw6 RztxMr9Z e6t7uu3e vV7UTKThUEkyRkq8IXwxIw5qYctN8gIx
  • MFC用户界面多线程实例2

    以下是 MFC 用户界面线程相关知识 由于用户界面线程含有自己的消息循环 xff0c 可以出来 Windows 消息 xff0c 并可创建和管理诸如窗口和控件等用户界面 元素 因此 xff0c 这 种线程较工程线程更为复杂 创建用户界面线程
  • 反汇编定位代码崩溃位置_1

    原帖 xff1a http blog csdn net gwzz1228 article details 9045853 利用map xff0c cod文件定位崩溃代码行 利用vs2010 新建一个空的控制台项目 xff0c 添加文件gtg
  • 反汇编定位代码崩溃位置_3

    原帖 xff1a http blog sina com cn s blog 141f234870102van8 html win7 43 vs2010通过map文件和cod文件找到崩溃的代码行 2015 01 11 11 31 04 转载
  • 反汇编定位代码崩溃位置_4

    原帖 xff1a http blog csdn net xiao article details 23177577 GDB如何从Coredump文件恢复动态库信息 标签 xff1a GDBcoredumpso调试动态库 2014 04 08
  • STM32Cube的串口设置(二)一个串口接收另一个串口发送

    串口系列 STM32Cube的串口设置 xff08 一 xff09 即学即用 通过串口设置第一部分大家应该基本会使用单个串口进行收发了 所以本次介绍通过串口进行转发 适合情景为一个串口设备波特率为38400 xff0c 但是接收模块仅支持1
  • C链表反转

    节点 struct Note int value Note pNext typedef struct Note PList 生成一个链表 Note GenerateList 输出一个链表 void PrintList Note pHead
  • PMP考试重点知识

    第一章 引论 前三章 是整个知识体系的支撑框架 xff0c 每次考试中都会考到 xff0c 但是一般在15道题左右 xff0c 前 三章 学不好后面的章 节很难理解透彻 1 项目的特点 xff1f 2 什么是项目管理 xff1f 3 项目和
  • pcb焊接技巧

    焊接的先后次序 要想更高效 可靠地焊好一块板子 xff0c 是要遵循一定的原则 xff08 如 先小后大 xff09 的 xff0c 不可乱来 xff0c 更不是看哪个元件顺眼就焊哪个 一般我拿到一块板子后的处理流程是 xff1a 打印 P
  • js中通过document获取标签节点

    使用id名表示标签 xff0c 不够严谨 在html语法中 xff0c id名随便起 xff0c 可以是js中的关键字 xff0c 但是在js中使用id代表标签 xff0c 就不能使用关键字 xff0c 所以我们需要一种更加严谨的方式获取标
  • 安装ubuntu-desktop

    目录 安装ubuntu desktop 解决root登录受限 安装远程访问软件 方法一 xff1a 安装vnc4server 方法二 xff1a Teamviwer安装 传送门 推荐 正文 回到顶部 安装ubuntu desktop 复制代
  • python读取C语言头文件

    在使用python编程过程中 xff0c 经常需要对C语言文件进行操作 xff0c 即 h文件进行读取操作 xff0c 这里举例说明 xff0c python读取C语言头文件 xff0c 提取其中 define 宏定义 废话少说 xff0c
  • makefile(详细讲解)

    目录 1 makeflie2 多个文件执行makefile 1 makeflie makefile带来的好处就是 自动化编译 xff0c 一旦写好 xff0c 只需要一个make命令 xff0c 整个工程完全自动编译 xff0c 极大的提高