全民建站成都网站建设公司 四川冠辰科技

当前位置: 首页 > news >正文

全民建站,成都网站建设公司 四川冠辰科技,台州百度快照优化公司,网站备案时间太长介绍#xff1a; make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件#xff0c;其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件#xff0c;里面保存的是依赖关系和依赖方法。make是一个命令行工具 make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件里面保存的是依赖关系和依赖方法。make是一个命令行工具用于根据Makefile文件中定义的依赖关系和依赖方法来生成程序。 make/Makefile的使用 在使用此构建工具时首先我们要建立一个名称为 Makefile或makefile 文件这里要注意 的是名称是固定的不可更改。建立之后就要进入vim编辑步骤输入依赖关系和依赖方法来对指定程序进行指令控制。 下面我们使用最简单的gcc编译操作来对C语言源文件程序进行控制。 [zhuzhujunhao ~]\( vim Makefile [zhuzhujunhao ~]\) cat Makefile code.exe:code.c       #第一行叫做依赖关系即对文件code.c进行操作     gcc code.c -o code.exe   #第二行叫做依赖方法该方法对code.c文件进行编译 [zhuzhujunhao ~]\( make  #直接make开始执行Makefile文件中指令 gcc code.c -o code.exe   #Makefile 的依赖方法操作 [zhuzhujunhao ~]\) 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文件中对相关东西进行清理工作。如下 [zhuzhujunhao ~]\( vim Makefile [zhuzhujunhao ~]\) cat Makefile clear:                           #定义clear的依赖关系     rm -f code.exe        #clear对应的依赖方法 code.exe:code.c        #定义目标文件code.exe依赖关系     gcc code.c -o code.exe       #code.exe的依赖方法 [zhuzhujunhao ~]\( make     #默认执行第一个依赖关系所对应的依赖方法。 rm -f code.exe [zhuzhujunhao ~]\) 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 [zhuzhujunhao ~]\( make code.exe     #进行说明执行第二个依赖关系所对应的依赖方法 gcc code.c -o code.exe [zhuzhujunhao ~]\) 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】所对应的详细时间记录。 [zhuzhujunhao ~]\( 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 [文件] 指令当不存在【文件】时将会创建文件当存在【文件】时将会全部更新文件所对应的时间。 Makefile/makefile语法使用        1.PHONY的使用 当我们不想改变文件所对应的时间时进行连续编译这时需要在Makefile/makefile文件中进行.PHONY修饰伪目标。 [zhuzhujunhao ~]\) vim Makefile [zhuzhujunhao ~]\( cat Makefile .PHONY:code.exe    #修饰code.exe目标文件成为一个伪目标使其总是可以被执行 clean:                      #我们也可用.PHONY修饰clean目标即.PHONY:clean使其总是执行     rm -f code.exe code.exe:code.c       gcc code.c -o code.exe [zhuzhujunhao ~]\) make code.exe gcc code.c -o code.exe [zhuzhujunhao ~]\( make code.exe gcc code.c -o code.exe [zhuzhujunhao ~]\) make code.exe gcc code.c -o code.exe 2名称的替换 在Makefile/makefile文件中可用 “ ” 进行名称替换工作使用别名时只需用 \((别名) 进行替换即可如下 #使用 进行名称的替换    ggcc    o-o    ccode.c    execode.exe #使用别名替换即\)(别名)    .PHONY:\((exe)    #修饰code.exe目标文件成为一个伪目标使其总是可以被执行    clean:        rm -f \)(exe)    \((exe):\)©          gcc \(^ \)(o) \(   # \)代表目标文件\(^代表依赖文件列表      3语法推导 在Makefile/makefile中若存在多个依赖关系当make运行其中一个依赖关系的依赖方法时系统会先判断依赖关系中对应的依赖文件列表并且对应的依赖文件不存在时将会自动往下继续寻找直到找到指定的命令来生成这个目标文件若找不到系统将会报出异常若找到了系统将会往上不断返回执行对应的指令以便生成这个目标文件。如下 [zhuzhujunhao ~]\) vim makefile [zhuzhujunhao ~]\( cat makefile code.exe:code.o     gcc \)^ -o \( code.o:code.s     gcc -c \)^ -o \( code.s:code.i     gcc -S \)^ -o \( code.i:code.c     gcc -E \)^ -o \( 以上的makefile的工作流程是这样的 首先当你运行 make code.exe时make会检查 code.exe是否已经存在。如果存在make就不会重新编译。如果不存在make会找到它的依赖文件code.o若依赖文件code.o 不存在系统将往下查找运行指定的命令来生成这个目标文件。这个过程会一直继续直到所有的目标文件都被生成。然后对于每个目标文件makefile都会检查是否所有的依赖文件都已经被更新。如果是那么目标文件就会被重新编译。这个过程会一直继续直到所有的目标文件都被更新。 如果命令失败了或全部指令运行完之后目标文件还没有被更新make会停止并显示错误信息。 总的来说makefile定义了如何将C语言源代码code.c编译成可执行文件code.exe的过程。在编译过程中它首先将C语言源代码预处理为中间文件code.i然后将中间文件编译为汇编文件code.s接着将汇编文件code.s编译成二进制文件code.o最后将二进制文件链接为可执行文件code.exe。 [zhuzhujunhao ~]\) make gcc -E code.c -o code.i gcc -S code.i -o code.s gcc -c code.s -o code.o gcc code.o -o code.exe 可看出Makefile/makefile的程序指令运行中依赖关系如同栈结构中不断推导进栈当查找到最终所以属的目标文件时依赖关系中对应的依赖方法将会不断的出栈运行。这种形式就叫做makefile/Makefile的语法推到过程。 总使用make和Makefile/makefile可以简化编译和构建程序的过程只需要编写一个简单的Makefile/makefile文件就可以自动化地编译和链接程序。同时Makefile/makefile还可以在不同的平台上使用使得程序的构建更加灵活和可移植。