介绍:
make和Makefile是用于编译和构建C/C++程序的工具和文件。Makefile是一个文本文件,其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件,里面保存的是依赖关系和依赖方法。make是一个命令行工具,用于根据Makefile文件中定义的依赖关系和依赖方法来生成程序。
make/Makefile的使用:
在使用此构建工具时,首先,我们要建立一个名称为 Makefile或makefile 文件,这里要注意 的是名称是固定的,不可更改。建立之后就要进入vim编辑步骤,输入依赖关系和依赖方法来对指定程序进行指令控制。
下面,我们使用最简单的gcc编译操作来对C语言源文件程序进行控制。
[zhu@zhujunhao ~]$ vim Makefile [zhu@zhujunhao ~]$ cat Makefile code.exe:code.c #第一行叫做依赖关系,即对文件code.c进行操作 gcc code.c -o code.exe #第二行叫做依赖方法,该方法对code.c文件进行编译 [zhu@zhujunhao ~]$ make #直接make,开始执行Makefile文件中指令 gcc code.c -o code.exe #Makefile 的依赖方法操作 [zhu@zhujunhao ~]$ ll total 24 -rw-rw-r-- 1 zhu zhu 181 Dec 7 09:15 code.c -rwxrwxr-x 1 zhu zhu 8360 Dec 7 17:02 code.exe #make形成可执行文件code.exe -rw-rw-r-- 1 zhu zhu 827 Dec 5 14:52 install.sh -rw-rw-r-- 1 zhu zhu 40 Dec 7 17:01 Makefile
其中,依赖关系是所要针对的文件,上面依赖关系 code.exe:code.c 中的 mybin 叫做目标文件,make 操作的就是此文件,code.c 叫做依赖文件列表,两者之间用 “ : ” 分割。依赖方法是要对此文件进行指令操作,上面的依赖方法 gcc code.c -o code.exe 是对code.c文件进行编译处理。
这里要注意的是,当我们使用make后,就不能再次使用make对其进行编辑。这时我们需在Makefile文件中对相关东西进行清理工作。如下:
[zhu@zhujunhao ~]$ vim Makefile [zhu@zhujunhao ~]$ cat Makefile clear: #定义clear的依赖关系 rm -f code.exe #clear对应的依赖方法 code.exe:code.c #定义目标文件code.exe依赖关系 gcc code.c -o code.exe #code.exe的依赖方法 [zhu@zhujunhao ~]$ make #默认执行第一个依赖关系所对应的依赖方法。 rm -f code.exe [zhu@zhujunhao ~]$ ll total 12 -rw-rw-r-- 1 zhu zhu 181 Dec 7 09:15 code.c -rw-rw-r-- 1 zhu zhu 827 Dec 5 14:52 install.sh -rw-rw-r-- 1 zhu zhu 65 Dec 7 18:04 Makefile [zhu@zhujunhao ~]$ make code.exe #进行说明执行第二个依赖关系所对应的依赖方法 gcc code.c -o code.exe [zhu@zhujunhao ~]$ ll total 24 -rw-rw-r-- 1 zhu zhu 181 Dec 7 09:15 code.c -rwxrwxr-x 1 zhu zhu 8360 Dec 7 18:05 code.exe -rw-rw-r-- 1 zhu zhu 827 Dec 5 14:52 install.sh -rw-rw-r-- 1 zhu zhu 65 Dec 7 18:04 Makefile
这里需注意,Makefile 定义的依赖关系中的 “目标文件” 不一定非要是文件,主要作用在于依赖方法,比如上面的 clear 功能就是删除文件操作。这里的 “目标文件” 是一个抽象的概念。
Makefile和make 形成目标文件的时候,默认是从上到下扫描Makefile文件的,若不加以说明,默认形成的是第一个目标文件。
上面说到 make 只能编译一次。但是我们发现,当修改源文件时,可再次进行 make 编辑,这是因为make会根据文件所对应时间的修改而再次进行编辑。使用 stat [文件或目录] 可查看【文件或目录i】所对应的详细时间记录。
[zhu@zhujunhao ~]$ stat code.c #查看code.c文件所对应的时间记录 File: ‘code.c’ Size: 181 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 1052177 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ zhu) Gid: ( 1001/ zhu) Access: 2023-12-07 09:15:21.064989027 +0800 Modify: 2023-12-07 09:15:21.060988852 +0800 Change: 2023-12-07 09:15:21.060988852 +0800 Birth: -
这里,所对应的时间为Access、Modify、Change三个记录。其中,Access是最近一次对文件进行访问(即读文件)的时间,Modify是最近一次对文件内容进行修改的时间,Change是最近一次对文件属性进行修改的时间。要注意的是Access所对应的文件访问的时间不是每次访问都会更新,在短时间内频繁的访问系统不会更新。这样保证了不会对系统带来太大的负担。
文件时间:
make编辑文件时查看文件所对应的时间查看的是Modify所对应的时间,也就是说只要Modify所对应的时间被修改,make即可再次进行编辑。这里,我们可使用 touch [文件] 指令,当不存在【文件】时将会创建文件,当存在【文件】时将会全部更新文件所对应的时间。
【Linux系统编程】项目自动化构建工具make/Makefile--2https://developer.aliyun.com/article/1424707?spm=a2c6h.13148508.setting.31.214f4f0e85KpoT