【Linux】linux自动化构建工具make/makefile

linux自动化构建工具make/makefile

一,makefile是什么

对于makemakefile ,简单来说,make 是一个命令,用来执行makefile里面编写的编译命令。而makefile(Makefile)是一个文件,里面编写了对源文件,目标文件的一些相互依赖关系

举个例子,当我们在Linux中写了一个.c的C语言文件时,我们通常会在命令行输入 gcc -o 目标文件 源文件 ,但是如果我们同时要编译好几个文件,而且当项目比较庞大时,我们还能在命令行输入吗?

所以,make和makefile可以实现"自动化编译",只需要make一下,这个庞大的项目就可以自动编译完成。

二,如何写makefile

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法

这里实现一个简单的例子:

在Linux下写一个C代码文件

编写makefile

这里的mytest-d表示的是目标文件,test.c表示的是要编译的源文件,第二行则是编译指令。

这里的 .PHONY: 表示的是将clean修饰为了伪目标,表示可以反复执行。

这里做一下演示:

再次 make 时,则不能再执行。

但是可以多次 make clean

注:这里 make 的时候,会编译生成可执行文件,而要删除生成的可执行文件,要 make clean 。这是因为makefile和make形成目标文件时,默认从上到下扫描makefile文件,默认生成第一个,而且只生成一个。

三,文件的三个时间属性

根据上面的问题,下面来解释一下为什么会出现上述问题。

这是因为第一次make的时候,没有可执行文件,则make形成可执行文件,当第二次make的时候,当前的可执行文件的最近修改时间比源文件的最近修改时间新,所以不会再编译。

这里介绍一下文件的三个时间:分别是
Accsee ---文件访问时间
Moify ---文件内容修改时间
Change ---文件属性修改时间

当对文件的内容做修改时,该文件的Modify和Change的时间都会被修改,所以当改变文件的属性时,修改时间发生了变化,再次make时,会比源文件的最近修改时间新。

四,makefile的推导

看下面的makefile文件内容:

这里的processbar依赖main.o和process.o文件,这里会继续向下执行找到相应的.o文件,然后再倒推回去。

相关推荐
Yana.nice12 分钟前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月17 分钟前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊44 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
MMME~1 小时前
Ansible Playbook高效自动化实战指南
网络·自动化·ansible
跃渊Yuey1 小时前
【Linux】线程同步与互斥
linux·笔记
杨江1 小时前
seafile docker安装说明
运维
舰长1151 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀1 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居