首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux项目自动化构建工具-makeMakefile

依赖关系和依赖方法 mytest:code.c称之为依赖关系 mytest是目标文件,使用make命令后,生成运行文件叫mytest code.c是依赖文件列表,如果有多个使用空格符隔开,例如:code.c...这里要钱就是表明了依赖方法 项目清理 clear是一个种特殊依赖关系,clear也是目标文件,只不过后面什么都不跟 rm -f mytest是依赖方法,是删除文件 如何理解.PHONY: 在读取makefile...文件内容,是从上往下读取,默认认形成第一个目标文件 习惯上把形成可执行程序放在上面,make就可以直接形成 在编译,默认情况下,如果可执行程序是最新了,make就不会再去编译,如果就想让编译这个操作总是可以被执行...一般清理项目会总是执行,因此习惯上会有:.PHONY:clear 为什么makefile对最新可执行程序默认不想重新生成 如果项目种存在很多个源文件,如果在这些源文件中只进行了很小改变,如果去把所有的源文件重新编译一遍...最终需要目标文件一定要在第一个,后面的可以乱 我们自己使用makefile没必要像上述代码那样写,没必要纠结那么多选项,直接可以这样写: code.exe:code.c gcc -o $@

15210

【Linux系统编程】Linux项目自动化构建工具——makeMakefile

可见,makefile都成为了一 种工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...使用make和makefile主要步骤如下: 创建一个makefile文件,并为各个目标指定构建规则。 makefile中定义源文件之间依赖关系以及对应编译命令。...这是因为: 终端中运行make命令,我们可以指定目标。如果没指定,默认情况下,它只会执行makefile文件中第一个目标规则。...我现在再用 .PHONY 修饰clean 然后执行make clean 我们发现它可以连续执行,即使被清理过了,还可以执行成功 而我们make: 我们看到第一次可以执行,后面如果没有对源文件进行删除修改的话...那现在问题来了:我们myfile不加.PHONY修饰时候,make执行一次之后,再执行的话就不行了,他告诉我们已经是最新了。

18010
您找到你想要的搜索结果了吗?
是的
没有找到

Makefile教程

4.make工作流程 执行Makefile默认方式下,我们只输入make命令,则相当于make first_objname_in_Makefile,意思是生成出现在Makefile中第一个目标文件...文件也是最新啦,于是file.o文件修改时间要比最终可执行程序要新,所以最终可执行程序也会被重新链接更新。...伪Target是用来显示请求执行命令名称。 为什么使用PHONY来指明命令名称: (1)避免和同名文件冲突。...但是当存在与命令名称同名目标文件,一定要使用PHONY来描述命令名,因为命令名没有依赖文件,如果同名文件始终是最新文件,那么显示make命令名,该命令永远不会被执行。...直接执行clean这个伪目标依赖命令。 (2)使用.PHONY指定伪目标可以改善性能。因为PHONY目标并非是由其它文件生成实际文件,没有依赖项,make 会跳过依赖项搜索和依赖项更新检查。

3.9K53

make menuconfig执行流程分析

如果一个规则没有命令或者依赖,并且它目标不是一个存在文件名。执行此规则目标总会被认为是最新。就是说:这个规则一旦被执行,make就认为它目标已经被更新过。...这样目标作为一个规则依赖,因为依赖总被认为被更新过,因此作为依赖所在规则中定义命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义为一个伪目标,所以它作为依赖总是被认为是最新(比目标新),故有FORCE作为依赖目标每次make必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系中...如果一个规则没有命令或者依赖,并且它目标不是一个存在文件名。执行此规则目标总会被认为是最新。就是说:这个规则一旦被执行,make就认为它目标已经被更新过。...FORCE被定义为一个伪目标,所以它作为依赖总是被认为是最新(比目标新),故有FORCE作为依赖目标每次make必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系中

3.4K10

【Linux】自动化构建工具-makeMakefile

make有自动推导功能,所以隐晦规则可以让我们比较粗糙地简略地书写makefile,比如源文件与目标文件之间时间关系判断之类 makefile中可以定义变量,当makefile被执行时,其中变量都会被扩展到相应引用位置上...也就是只有make时候,默认形成第一个目标文件。...3.3 PHONY:XXX 当我们程序里面不加上: 来make一下后,make一下,发现就不行了: 程序不被修改时,make后,默认就不会在形成新可执行程序,它认为没有必要。...如果想要makefile里面的操作总是被执行,不要因为是最新就拦截,就加上:.PHONY:mytest make多少次都会执行,没有拦截。...默认将clean用.PHONY:修饰: 要然清理工作总是被执行。 为什么makefile对最新可执行程序,默认不重新形成呢?

9710

【Linux】自动化构建工具makeMakefile和git介绍

举例 依赖文件列表以空格进行分割,依赖文件列表可以为空,如上方clean。上方直接使用make为什么会执行第一对依赖关系呢?因为如果make后面什么都不跟,就会默认执行第一对依赖关系。...make是从上往下执行。 .PHONY 格式: .PHONY:XXX 作用:修饰后XXX对应方法总是要被执行。...上方make使用一次后就不能继续使用了,是因为此时生成可执行程序已经是最新了,不需要更新。如果这里目标文件也被,PHONY修饰,也可以一直执行。...找寻的过程中,如果出现错误,比如最后被依赖文件找不到,那么make就会直接退出,并报错, 而对于所定义命令错误,或是编译不成功,make根本不理。...上面是打印倒计时程序,不过在运行时,为什么不会进行打印呢?因为\r会让光标回到行首,光标指地方,内容就被覆盖了,下图是VS中测试结果,此时光标3位置,3就被覆盖了,无法打印出来。

9110

【Linux操作系统】自动化编译make和Makefile

通过make工具解释makefile文件中命令,进行我们项目编译。 2.为什么要有make/makefile?...Linux环境下开发,工程源文件较少时,可使用gcc直接编译;但当工程源文件较多时,gcc直接编译复杂(比如命令较多,文件编译先后顺序确定问题等)且不易于后期项目的维护,因此采用make/makefile...3.伪目标 介绍伪目标前我们先讲一讲实目标的概念: 实目标:命令执行后真正要生成文件名, test就是实目标目标:命令执行后不会生成实际文件,常用于辅助操作, .PHONY是伪目标的标注符...:clean clean: @rm -rf test @: 不带@命令行执行make时候,会将所执行命令回显到终端,带@则不回显 为什么命令行执行时候,执行第一组依赖关系和依赖方法命令是...到这里我们也能解释为什么.PHONY有一个特点:被.PHONY修饰总是能被执行,那可能就是.PHONY修饰后不再通过比较test和test.c修改时间来判断是否要重新编译!

82540

make menuconfig makefile kconfig详解

、Q= @,make执行Makefile命令就不会向屏幕输出所执行命令。...规则命令部分有两种书写方式: a、目标、依赖描述和命令放在同一行,目标和依赖描述使用冒号(:)分隔开,依赖文件列表后使用分号(;)把依赖文件列表和命令分开。...如果一个规则没有命令或者依赖,并且它目标不是一个存在文件名。执行此规则目标总会被认为是最新。就是说:这个规则一旦被执行,make就认为它目标已经被更新过。...这样目标作为一个规则依赖,因为依赖总被认为被更新过,因此作为依赖所在规则中定义命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义为一个伪目标,所以它作为依赖总是被认为是最新(比目标新),故有FORCE作为依赖目标每次make必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系中

1.7K10

Makefile目标

1、Makefile伪目标的格式: .PHONY : clean clean:     rm xxxx 2、Makefile伪目标的作用: 第一种情况: 如果我们需要书写这样一个规则:规则所定义命令不是去创建目标文件...当文件夹中没有clean这个文件时候,我们输入“make clean”能按照初衷执行,但是一旦文件夹中出现clean文件,我们再次输入“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最新而不去执行规则所定义命令...clean:   rm xxxx 如果同一个目录下有一个clean文件,那么  make clean动作将不会执行rm动作; 所以,增加.PHONY目标使用的话,就会忽略目录下clean这个文件,...直接执行rm动作; 第二种情况: 伪目标的另一种使用场合时make并行和递归执行过程中。...) –C $$dir done 如果这样写,会出现几个问题: 1、 当子目录执行make出现错误,make不会退出; 2、 使用这种shell循环方式,没有用到make

1.3K70

【手把手系列】:芯片设计中Makefile简明教程

Makefile基本格式 目标:依赖 命令 目标是要生成结果,依赖是生成结果需要源文件和上一步骤结果,命令是当目标不存在或者依赖更新执行命令。.../simv -xxx 这个例子中,sim并不是要生成结果文件,而只是我们给操作起一个名字。由于伪目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。.../simv -xxx 这样,当我们不记得如何使用Makefile时候,直接敲make就会有使用帮助菜单。另外,我们还可以看到,一个目标后面可以执行多条命令,比如这里三条echo命令。...顶层目录里make clean,将会自动调用子目录make clean。这个怎么实现呢?看下面的例子: 示例九: ....这样顶到make clean,将自动递归到所有的子目录。

1.7K40

芯片设计中Makefile简明教程

/simv -xxx 这个例子中,sim并不是要生成结果文件,而只是我们给操作起一个名字。由于伪目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。.../simv -xxx 这样,我们terminal里就可以用make sim来调用仿真命令。 默认目标 如果我们只是敲make(后面不跟目标),那么将调用Makefile里第一个目标。.../simv -xxx 这样,当我们不记得如何使用Makefile时候,直接敲make就会有使用帮助菜单。另外,我们还可以看到,一个目标后面可以执行多条命令,比如这里三条echo命令。...顶层目录里make clean,将会自动调用子目录make clean。这个怎么实现呢?看下面的例子: 示例九: cat ....这样顶到make clean,将自动递归到所有的子目录。

1.9K50

【Linux】Linux 项目自动化构建工具 -- makemakefile 使用

文章目录 一、什么是 make/makefile 二、如何编写 makefile 三、make 工作原理 1、make 使用 2、make 依赖性 3、项目清理 4、.PHONY目标 四、Linux...---- 三、make 工作原理 1、make 使用 Linux下,我们输入 make 命令后,make 会在当前目录下找寻名为 “Makefile” 或 “makefile” 文件;如果找到,...,.PHONY 原理和作用也显而易见了 – 被 .PHONY 修饰目标文件不根据文件修改时间先后来判断是否需要重新执行,从而达到总是被执行效果。...; 可以看到,我们C语言中 ‘\n’ 作用是 回车 + 换行,而不仅仅是换行,这也是为什么许多台式机 enter 键是下面这样: 2、行缓冲 C语言 getchar 函数正确使用 中我们就已经知道...注意: printf 函数中,% 具有特殊意义,所以我们需要输入 %% 来对其进行转义;同样, label 数组中,字符 ‘\’ 也是特殊字符,我们需要输入 ‘\\’; 最终得到进度条运行效果如下

1K00

Make

命令行属性: 可在命令前、Tab键后加上如下符号: -:执行本命令行如果遇到错误,继续执行而不退出make。 +:总是执行该命令,即使执行make使用了-n,-q,-t选项。...伪目标: 先看以下代码: clean: -rm -rf *.o 因为clean后没有依赖文件,所以clean被认为是最新,不会执行rm命令,若要执行rm,需要执行make clean命令。....PHONY:clean clean: -rm -rf *.o .PHONY依赖文件为伪目标,作用是伪目标的命令即使在当前目录下存在与伪目标同名文件也执行该命令。...特殊目标: .PHONY:伪目标,如上 .IGNORE:对于该目标依赖文件,生成如遇到错误则可跳过错误继续执行,不会中断make。....SUFFIXES:该目标的依赖被认为是一个后缀列表,检查后缀规则使用。 .SILENT:生成该目标文件依赖文件所执行命令都不被打印,如果其后无依赖文件,则所有的命令都不会被打印。

1.9K100

make、Makefile项目自动化构建工具

指令使用,则需要我们Makefile文件中将任务进行编写。...关于make 我们在上面演示了make mytest 实现自动编译,但是我们发现,即使我们输入make这个指令,也依然可以实现自动编译,这是为什么呢?....PHONY 我们上面已经说了,假如文件最近属性没有发生改变(这里主要是指文件最近修改时间),我们再次执行make指令,会发生报错,我们解决方法是我们打开这个文件,不做修改再保存并退出来,就可以再次使用...有的,就是利用 .PHONY,.PHONY是Makefile中一个关键字: 对某对象生成伪目标,它作用 就是可以使我们不对文件属性进行修改情况下,任意使用make指令。...使用方法 用起来也很简单,在任务上方用.PHONY对我们文件进行修饰一下即可,如下: 实战练习:多文件同时编译 是不是会方便很多,假如项目特别多的话,我们只需要按照要求,将任务写好,然后便可以实现自动化构建

92940

Linux工具学习之【gccg++】

-o OK test.c //这种写法也是可以 我们使用 gcc/g++ ,都可以通过 -o 选项生成指定文件 -E 预处理 C语言学习阶段,我们学习了源文件变成可执行文件过程,即预处理...,原文件最近修改时间没有发生变化时,无法再执行任务,这背后原因是方法是否执行会先判断生成目标文件是否为最新,如果为最新,就不再执任务 举例:重复执行 make myfile 任务 $ make myfile...,使源目标文件不是最新时间 .PHONY目标 .PHONY 是 Makefile 文件中一个关键字,意为对某某对象生成伪目标,这样就能在不对源文件进行修改情况下,重复执行任务了 //Makefile...文件中 .PHONY:myfile 使用关键字 .PHONY目标进行修饰后,可以无视任务刷新策略,重复执行任务了 不过这有什么意义呢?...: rm -r myfile 换个角度想想,当我们把生成目标文件清理后,再执行任务,生成目标文件是一件很合理事,也完全符合任务刷新策略 由此来看,.PHONY 也是很有用 注意: 像 clean

17420

换个角度说Makefile

gcc就可以编译得到想要程序了: $ gcc -o main main.c -lm (如果不理解为什么要加-lm,请参考《一个奇怪链接问题》)。...使用基本流程,生成目标,清除目标。...,因此需要加一个伪目标clean: .PHONY:clean clean: rm $(OBJ) $(TARGET) 伪目标的意思是,它不是一个真正要生成目标文件,.PHONY:clean说明了...在这种情况下,即使当前目录下有clean文件,它也仍然会执行后面的指令。 否则如果当前目录下有clean文件,将不会执行rm动作,而认为目标文件已经是最新了。...注意,由于第一个目标是main.o,因此你单单执行make时候,它只是会生成main.o而已,如果你再执行一次会发现它提示你说main.o已经是最新了: $ make gcc -g -Wall -c

73920

实战Makefile前,该知道那些知识?

makemake clean 生成目标文件规则(make命令): 执行make命令则会根据当前目录Makefile文件定义规则生成对应目标文件。...:增加伪目标:.PHONY:clean: .PHONY:clean clean: rm $(obj) *.o 注意: clean规则不要放在文件 开头,不然,会变成make默认目标,一般...书写规则 显示规则(@字符): 当用@字符命令前面,那么执行这条命令时候,这条命令不会显示出来。...echo "rice makefile" rice makefile 注意: make命令参数 -s 或 --silent 或 --quiet 则是全面禁止命令显示 命令执行规则: 当依赖目标新于目标...其中,加入要让上一条命令结果应用在下一条命令,应使用分号分隔这两条命令,并且不能将两条命令写在同一行。

45020

使用 Make 构建网站

本文介绍如何使用make命令,作为网站构建工具。以下内容既是make语法实例,也是网站构建实战教程。你完全可以将代码略作修改,拷贝到自己项目。 ?...(题图:国家考古博物馆,西班牙,摄于2014年8月) 一、Make优点 首先解释一下,为什么要用Make。 目前,网站项目(尤其是Node.js项目)有三种构建方案。...即使是文件改名这样简单任务,都要写插件,相当麻烦。而Make是直接调用命令行,根本不用担心找不到插件。...$ make UGLIFY=node_modules/.bin/jsmin min 上面代码,将jsmin命令给变量UGLIFY,压缩就会使用jsmin命令。...使用时调用下面的命令。 $ make build 如果这行规则在Makefile最前面,执行时可以省略目标名。 $ make 通常情况下,make一次执行一个任务。

3.2K40
领券