目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、make/makefile是什么?
在Linux中make是一条指令,makefile是文件。make的核心功能就是读取一个或者多个名为makefile的文件,这些文件构成整个项目。是否会makefile,是一个人是否有能够完成大型工程项目能力的侧面体现。
二、深入了解
touch makefile //创建一个makefile文件
touch my_text.c
vim makefile //打开vim
my_text:my_text.c //依赖关系
gcc -o my_text my_text.c // 依赖方法clean:
re -f my_text //代码前面必须是Tab不能用空格
make // 它就会自动编译后面的代码
./my_text //就会编译代码
make clean // clean是独立存在的不需要依赖关系,它用于执行完文件后所进行的删除
make的编译是跟时间有关,它会根据文件的新旧判断是否进行重新执行依赖关系,进行进一步的编译。
make是先寻找makefile在makefile中自上到下寻找可执行文件,它会根据里面的依赖关系和依赖方法去寻找我们的可执行文件。有时候我们执行make之后 如果没有进行clean的删除那么它是有时候是不会再次编译。这是因为如果代码没有被改变,那就不需要在编译,因为再编译也没有用。那如果我们就像编译怎么办。touch my_text.c 之后make就可以继续编译。或者makefile里面含有clean,那么make clean 会删除编译过的文件,就可以再次make了。
touch后跟没有创建的文件名是创建文件,如果跟已有的文件名是更新文件的时间,使这个文件时间是最新的那么,它就可以正常make了
两个指令
// 在 Makefile 中,.PHONY 是一个特殊的目标,用于定义伪目标
.PHONY:clean //它在前面也可以一直make
.PHONY:my_text
将 clean 定义为 .PHONY 可以确保即使没有 clean 文件存在,make 也会执行 clean 目标中定义的命令。如果你不声明一个目标为 .PHONY,make 会试图寻找一个与该目标同名的文件。如果没有找到该文件,make 将认为目标是最新的,因此不会执行与之关联的规则。通过将一个目标声明为 .PHONY,你可以告诉 make 不要试图查找与之对应的文件,而直接执行与之关联的命令。
如果指令前面加上 @ 就不会在屏幕是显示这行指令了。
$@代表 my_text. $^代表 my_text.c 所以后面只写 $@与$^就不用写文件名了。这是一种特殊符合,可以节省一些写代码的时间。