【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文件,然后再倒推回去。

相关推荐
APItesterCris几秒前
Open Claw 实战教程:5 分钟搭建京东商品自动化监控与数据分析系统
大数据·运维·数据库·数据仓库·自动化
Darkwanderor17 分钟前
Linux系统编程实战项目:模拟实现shell
linux·c++
de之梦-御风1 小时前
【工业自动化平台】 工程设计-项目分层目录设计(1)
自动化·.net
杨某不才2 小时前
如何能让Linux服务器对shell 终端 + sftp 文件传输长期保活
linux·运维·服务器
vance042 小时前
免费Cloudflare隧道隐藏公网IP
linux·tcp/ip·github
三言老师3 小时前
文本工具组合统计服务器日志数据
linux·运维·服务器
m0_743697593 小时前
DNS服务器
运维·服务器
mounter6253 小时前
认识 Tetragon:基于 eBPF 的安全监控与强制执行工具
linux·ebpf·cve·kernel
寒水馨4 小时前
macOS下载、安装PowerShell-v7.6.4(附安装包powershell-7.6.4-osx-arm64.pkg)
macos·自动化·跨平台·shell·脚本·命令行·powershell
起司喵喵5 小时前
推荐一款基于 Python 和 Rust 开发的跨平台 GUI 自动化库!
python·rust·自动化