为什么会这样?...我们来看一下 Makefile 中的这个规则: %.o: %.c gcc $< -c -o $@ 目标文件 main.o,只是依赖了 main.c 文件,并没有依赖 hello.h 文件。...make 的执行规则是:只有目标文件不存在,或者依赖文件比目标文件更新的时候,才会执行编译指令。 因此,虽然 hello.h 被修改了,但是它并不是目标文件 main.o 的依赖。...,而它的内容正是我们需要的目标文件依赖信息。...然后在 Makefile 中,include 这个 .d 文件,从而让 make 知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。
import graphviz d = graphviz.Digraph(filename='rank_same.gv') with d.subgraph(...
makefile制定了一系列的规则来指定。 makefile带来的好处就是自动化编译,一旦写好这个文件,只需要一条make命令,整个工程就能自动完成编译,极大的提高了效率。...该文件中主要写依赖关系和依赖方法: 注意: 有了makefile文件,make命令才能派上用场,保存退出makefile文件后在终端输入make命令就能完成自动编译 这个时候你可能有一个疑问:...makefile默认只执行第一个依赖方法,如果你要执行clean可以使用make+依赖关系 那么为什么要有依赖关系和依赖方法?...(依赖关系),我没钱了,打钱(依赖方法) 同理,对于makefile来说,基于mytest.c生成mytest文件(依赖关系),需要执行gcc mytest.c -o mytest命令(依赖方法)...文件内依赖方法的执行顺序和我的写法正好相反,这是为什么?
背景 make和makefile提供了自动化构建的能力,可以根据源文件的依赖关系和规则自动决定哪些文件需要重新编译。而直接使用gcc需要手动指定每个源文件的编译命令,不具备自动化的构建功能。...语法及概念介绍 3.1 makefile 的语法 然后,我们再回过来看Makefile,它为什么要那样写呢?该怎么理解呢?...我们把目标文件和他所依赖的文件列表之间的关系称为依赖关系,对应的命令称为依赖方法 所以: makefile是一个国绕依赖关系和依赖方法构建的一个自动化编译的工具 3.2 依赖关系与依赖方法的理解...然后make命令,它会自动分析文件的依赖关系,决定哪些文件需要重新编译,然后执行相应的构建规则。...在makefile中定义源文件之间的依赖关系以及对应的编译命令。 运行make命令,它会自动分析文件的依赖关系,决定哪些文件需要重新编译,然后执行相应的构建规则。
一、什么是make/Makefile make/Makefile的本质 Make是一个自动化构建工具,它根据Makefile中的指令来自动化执行构建过程。...依赖关系:指定构建目标所依赖的源文件。 命令:用于生成目标的具体命令。...,所以就有了自动化构建工具 下面我们来看一下如何简单的使用make/Makefile 首先,我们要先在当前目录下创建一个Makefile文件 touch Makefile 然后进入这个文件中,将我们的源文件和目标文件建立依赖关系...,如果将这几个依赖关系都写入Makefile文件中去,其实我们可以发现它会自己处理这种多层依赖关系,即使我们的顺序写的不对 2、为什么make命令的执行结果是gcc编译?...处理依赖关系:Make会自动处理文件之间的依赖关系,只有被修改的文件会被重新编译。 跨平台性:Makefile可以在多种Unix/Linux系统间共享,简化了跨平台开发。
通过简单的介绍,我们知道了makefile是一个自动化命令工具,那么使用方法第一个是要创建makefile文件,makefile或者是Makefile都可以,我们在文件里面写入一些指令加上一点操作,我们就可以实现自动化指令了...2 makefile介绍 我们从makefile文件中的第一个点开始: 第一行的test:test.c,其中test:test.c成为构成了依赖关系,test叫做目标文件,test.c是被test依赖的...这的理解我们可以理解为父子,儿子问父亲要钱,这里面存在父子之间的依赖关系,依赖方法是养育,所以给钱。 那么我们如果重复使用该命令呢?...我们首先看看test.c的ACM时间: 这里为什么不让多次执行编译的命令就是因为makefile工具比较的是源文件和可执行文件的ACM时间,如果可执行文件和源文件的ACM时间,在修改上有差别,make检测到源文件更新了...好了,现在又提到了依赖关系,那么,我们看一段代码: 我们不难发现依赖关系是连着的,所以我们可以直接创建编译的三个阶段的文件。 那么既然依赖关系是连着的,试试打乱顺序呢?
makefile,读取makefile里的内容,根据依赖关系去形成目标文件。...根据gcc这样的一个依赖方法形成。 换句话来说就是,make会读取makefile里面的内容 如何理解依赖关系和依赖方法 - 什么是依赖关系??...一般清理项目会总是执行,因此习惯上会有:.PHONY:clear 为什么makefile对最新的可执行程序默认不想重新生成 如果项目种存在很多个源文件,如果在这些源文件中只进行了很小的改变,如果去把所有的源文件重新编译一遍...@表示取code.exe文件, make时会自动替换成gcc -o code.exe code.c make会根据文件的依赖关系,进行自动推导,帮助我们执行所有相关依赖方法。...当前的依赖关系如果不存在,就将当前依赖关系入栈,如果下一个依赖关系存在导致当前依赖关系存在,则当前依赖关系出栈,这里就相当于一个递归。
那么如何在Makefile文件中编写任务呢? Makefile的使用 我们任务的编写,主要依靠两个东西,一个为依赖关系,一个为依赖方法。...(我们的依赖关系可以为n个,n>=0) 依赖方法 依赖方法就是这个mytest是如何从test.c转变过来的,如下图: 编写完成后,我们只需要输入make mytest这条指令,就会实现自动编译。...关于make 我们在上面演示了make mytest 实现自动编译,但是我们发现,即使我们输入make这个指令,也依然可以实现自动编译,这是为什么呢?...因为make默认执行第一组任务,我们把依赖关系+依赖方法两者看成一个组,而make命令只会执行第一组的自动化任务。...(注意,必须是依赖关系+依赖方法才能够成一个完整的自动化构建任务) 当然,一组任务里的依赖方法也可以不仅仅只有一个。
文章目录 一.make/makefile简介 1.什么是make,makefile? 2.为什么要有make/makefile?...通过make工具解释makefile文件中的命令,进行我们的项目编译。 2.为什么要有make/makefile?...做到自动化编译,有益于项目开发。...ps: makefile文件名也可叫:Makefile makefile文件中注释用“#” test:test.c #依赖关系 gcc test.c -o test #依赖方法...,执行第一组依赖关系和依赖方法的命令是make,执行第二组依赖关系和依赖方法的命令却是make clean?
,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作 makefile 带来的好处就是 ——“ 自动化编译 ” ,一旦写好,只需要一个 make 命令,整个工程完全自动编译...makefile是保存依赖关系和目标的一个东西。...3.依赖关系 如果我们要编译一个mytest.c的文件,首先我们要创建一个名为makefile的文件,名字必须是Makefile/makefile,那么第一行需要我们写上我们需要创建的可执行程序的名称以及这个目标文件所需要的依赖文件名称...8. make 只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。...那么我们就需要在makefile里面定义一个clean,它的依赖关系为空,因为不需要依赖任何文件,依赖方法如下,也就是删除mytest这个临时文件,-f的意思是强制删除,就不会询问了。
一、Makefile简介 Makefile是什么,能做什么用,为什么要用?...定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则的格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件时,就会使用伪目标比如...f fileName -n 显示待执行的命令,但不执行 Makefile组成 显式规则:生成、依赖文件,生成命令 隐含规则:make支持的自动推导功能, make –p 打印 变量定义:类C...text-if-true else text-if-false endif ifeq ($(CC),gcc) # 是否相等 ifdef CC # 变量是否定义 自动推导依赖关系...gcc –M main.c 自动生成目标文件和源文件的依赖关系; -MM去除系统头文件的依赖关系 maze.d,其内容是 maze.o maze.d:maze.c maze.h
但是,我接下来要解释一下makefile文件里的内容。 ✈️ 依赖关系与依赖方法 生成项目 makefile里面,最重要的一个概念就是,依赖关系和依赖方法: mybin:这里是目标文件。...现在我们既可以进行自动化编译,也可以进行自动化清理,例如: 为什么我们自动化编译只需要make,而资源清理却需要make clean?...我们不妨在makefile文件中将两者位置互换: 这时我们再进行make,我们会发现: 结论: make指令默认是makefile文件中的第一个依赖关系!... 其实这就是makefile文件的 语法推导 过程,首先 根据依赖关系向下推导,再根据依赖方法从下往上推导 ,很类似于入栈出栈的过程。 ...测试是否是自底向上执行依赖方法: ✈️ 总结: makefile有一个重要概念——依赖关系和依赖方法,依赖关系又有目标文件和依赖关系列表。
/mytest就可以运行mytest了 以上操作就叫做make和Makefile 二.make/makefile的核心思想 mytest:test.c gcc test.c -o mytest 依赖关系...: 上面的文件mytest,它依赖test.c 依赖方法: gcc test.c -o mytest 所以make/Makefile的核心思想是:依赖关系和依赖方法形成目标文件 依赖关系和依赖方法必须同时存才有效...时就会发现当前目录没有test.o文件,所以Makefile发现.o不存在,Makefile会自动去找test.o依赖谁,test.o依赖test.s,test.s在当前目录也不存在,.s依赖.i,.i...结论: make会进行依赖关系的推导,知道依赖文件时存在的 如何推导呢?...依赖方法不止可 以写一行,我们也可以定制化输出信息 总结: makefile是一个自动化构建的工具,可以通过定义规则、变量和函数来简化编译过程。
make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写makefile,比如源文件与目标文件之间的时间关系判断之类 在makefile中可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上...make会根据makefile的内容,完成编译或者清理工作。 3.1 依赖关系和依赖方法 怎么理解依赖关系和依赖方法呢?...就有了依赖方法。 计算机要形成某种可执行程序,就得先表明依赖关系,然后怎么具体形成可执行程序,这就要有具体依赖方法。 依赖关系和依赖方法是完成一件事情的必然要素,并非makefile特有的。...为什么makefile对最新的可执行程序,默认不重新形成呢? 如果在一个项目里面存在上千个源文件,每次改代码时候,可能就修改一小部分。...makefile/make 会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法。
make/makefile实现自动化构建 make是一个命令工具,是一个解释makefile在指令的命令工具,大多数的IDE都存在这个命令。...makefile是一个文件,make是一个命令;二者搭配使用来完成项目的自动化构建 makefile的好处就是自动化构建,写好makefile文件以后就只需make命令就可以完成项目工程的自动化构建,提点高了软件开发的效率...依赖关系和依赖方法 对于上述makefile文件,在介绍之前我们先来想要个问题,就是依赖关系和依赖方法 依赖关系:所谓依赖关系就表明两个事物(这里指目标文件和依赖文件)之间关系(就像现实生活中两个人之间的关系一样...这样我们就很好理解了,上述makefile文件中,code作为目标文件、code.c作为依赖文件、通过依赖关系gcc code.c -o code来生成目标文件。 2....又为什么被称为伪目标呢?
,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率...: 创建文件mycode.c利用vim进入编写一个简单的程序,创建文件makefile(m可以大写)编写依赖关系和依赖方法,最后直接通过make完成编译。...生成mycode ---- 3、原理 makefile的具体原理: 必须包含依赖关系和依赖方法 makefile存在的意义,为了构建项目。...对于上面的例子,mycode的形成依赖于mycode.c,所以需要把mycode.c进行编译线程mycode 初识makefile的语法 第一步,建立依赖关系,谁依赖:于谁(比如mycode依赖于mycode.c...在make推导的时候会根据依赖关系而推导,从上到下,当依赖文件列表不存在会继续根据依赖文件列表所对应的项而继续。
Linux项目自动化构建工具 - make/makefile 1.1 make/makefile的背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数...可见,makefile都成为了一种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...,我们只要: 指令:make clean 那为什么形成可执行程序可以直接用make,但是删除不行呢?...的依赖关系 make/makefile兼具推导能力 比如:我们可以写下以下程序 可执行程序mytest的生成依赖.o文件但是此时没有.o文件 就会执行下一条指令,但是.o文件依赖的是.s文件,系统中此时没有...同样生成了可执行程序 makefile文件还可以进行简写 Makefile文件的简写方式: $@:表示依赖关系中的目标文件(冒号左侧) $^:表示依赖关系中的依赖文件列表(冒号右侧全部) @表示
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率,但目前我觉的这两个工具就是用来像编译器那样在Linux环境下去编译程序...上述就是项目的自动化清理,我们也要又项目的自动化清理 2.3输入make clean指令 下面的clean就是我们的项目自动化清理,make就是我们的编译生成mybin可执行文件,make clean就是将我们的...mybin清理掉,下面这张图就是将mybin进行了清理 3、makefile文件如何编译程序 我们首先要明确make是一个指令,而makefile是一个文件(依赖关系和依赖方法) 什么是依赖关系和依赖方法...: 依赖关系:我为什么要帮你 依赖方法:怎么帮 具体实例: TIP: 1、Makefile和make形成目标文件的时候,默认是从上到下扫描makefile文件的。...这里的@对应的mybin可执行文件,^对应的目标文件,相当于一个简写 其中mybin也可以这样书写,相当于宏替换,就是以$加上()的形式进行替换 问题:我们这里为什么不把伪目标加到生成可执行文件上,而是加到
make 命令通过读取一个名为 Makefile 或 makefile 的文件,根据其中定义的规则执行各种任务(如编译、链接等),从而简化和自动化项目的构建过程。...make 的优点 自动化构建:根据文件依赖关系,只重新编译必要的文件。 易于维护:通过 makefile 管理复杂项目的构建流程。...为什么使用 .PHONY .PHONY 可以避免文件名和目标名冲突的问题。...依赖关系 make 会跟踪文件的依赖关系。...如果我们想执行其他组的依赖关系和依赖方法,make name 2.make makfile在执行gcc命令的时候,如果发生了语法错误,就会终止推导过程 3.make解释makefie的时候,是会自动推导的
1.为什么要有make/makefile 会不会写makefile可以从侧面说明一个人是否具备完成大型工程的能力。...makefile带来的好处就是–”自动化编译“,只要预先写好makefile,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。...下面会提到 3.理解依赖关系 还是这段代码: #include int main() { printf("hello makefile\n"); return 0; } 不过这次的...文件中mybin依赖于test.o test.o依赖于test.s test.s依赖于test.i test.i依赖于test.c gcc test.* -option test.* #就是与之对应的依赖关系...会一层一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
领取专属 10元无门槛券
手把手带您无忧上云