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

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

二.makefile文件规则 1.基本规则 2.举一个例子 3.目标 4.其他规则 三.文件三个时间问题-make程序 1.三个时间何时更新 2.touch的两个作用 3.make程序如何知道依赖文件是否更新...目标:target,要生成的目标文件,往往是程序的中间文件或者最终的文件,比如test.i,test.s,test.o,test 依赖:prerequisites,目标文件由哪些文件生成,往往有的一个或多个...3.目标 介绍目标前我们先讲一讲实目标的概念: 实目标:命令执行后真正要生成的文件名, test就是实目标 目标:命令执行后不会生成实际文件,常用于辅助操作, .PHONY目标的标注符...目标的特点:目标可以总是被执行[为什么后面讲] 4.其他规则 变量名 含义 $@ 目标文件,可表示test $^ 所有的依赖文件,可表示test.c $< 第一个依赖文件 test:test.c...到这里我们也能解释为什么.PHONY有一个特点:被.PHONY修饰的总是能被执行,那可能就是.PHONY修饰后不再通过比较test和test.c的修改时间来判断是否要重新编译!

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

Makefile学习1

2) 隐晦规则 由于我们的 make 命名有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写 Makefile,这是由 make 命令支持的。...目标 目标并不是一个真正的文件,可以看做是一个标签。 目标一般没有依赖关系,也不会生成对应的目标文件,可以无条件执行,纯粹是为了执行某一个命令。 目标可以在执行默认目标之前先执行。...clean: rm -f a.out hello.o Makefile目标依赖 make第一次编译某个项目时,会依次编译所有的源文件。...make是根据时间戳来判断一个规则中的目标依赖文件是否有更新。...在模式匹配中,表示目标模式中%的文件名部分 -: :告诉make在编译时忽略所有的错误 @: :告诉make在执行命令前不要显示命令 变量替换 字符串替换 .PHONY: all SRC := main.c

34310

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

文章目录 一、什么是 make/makefile 二、如何编写 makefile 三、make 的工作原理 1、make 的使用 2、make 的依赖性 3、项目清理 4、.PHONY 目标 四、Linux....PHONY 修饰 clean 表示其是一个目标,总是被执行 (具体细节下文解释)。...另外,由于 clean 没有被第一个目标文件直接或间接关联,那么它后面定义的命令将不会被自动执行,所以我们需要显示指定 – make clean; 最后,像 clean 这种目标文件,我们一般都会用....PHONY 将其设置为目标目标的特性是:该目标文件总是被执行。...的所有时间) 在了解了 make 是如何判断是否要重新执行依赖方法形成目标文件之后,.PHONY 的原理和作用也显而易见了 – 被 .PHONY 修饰的目标文件不根据文件的修改时间先后来判断是否需要重新执行

1K00

Makefile教程

后面的每个目标文件皆是如此做法。 (9)目标的使用。 .PHONY clean clean: rm -f *.o *.out 使用.PHONY关键字,指明clean是目标,仅作标签使用。...实际上目标不需要使用.PHONY显示指明,直接书写即可,即.PHONY clean可以省略。 (10)Makefile赋值符号=、:=、+=和?=的区别。...7.相关知识点 7.1Makefile中目标文件一定要把依赖的头文件包含进去吗? 不一定,可以不包含进去。Makefile是根据依赖项是否被修改决定是否重新执行command。...7.9Makefile中PHONY关键字的作用 PHONY的用法: .PHONY Target1 Target2 PHONY的作用: 指明Target是目标,并不会真正生成Target目标文件。...直接执行clean这个目标依赖的命令。 (2)使用.PHONY指定目标可以改善性能。因为PHONY目标并非是由其它文件生成的实际文件,没有依赖项,make 会跳过依赖项的搜索和依赖项的更新检查。

3.9K53

gdb和makefile的讲解

breaktrace(或bt):查看各级函数调用及参数 Linux项目自动化构建工具-make/Makefile 1 make/makefile的背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力...如果hello文件不存在,或是test3依赖的后面的test3.c文件的文件修改时间要比test3这个文件新(可以用 touch 测试),那么,他就会执行后面定义的命令来生成hello这个文件。...如果test3依赖的文件不存在,那么make会在当前文件中找目标为test3.c文件的依赖性,如果找到则再根据那一个规则生成test3.c文件。(这有点像一个堆栈的过程) 5....4 清理 工程是需要被清理的,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面定义的命令将不会被自动执行,不过,我们可以显示要make执行。...即命令——“make clean”,以此来清除所有的目标文件,以便重编译。 但是一般我们这种clean的目标文件,我们将它设置为目标,用 .PHONY 修饰,目标的特性是,总是被执行的。

9210

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

tb.sv和dut.v是依赖,执行命令前会先检查tb.sv和dut.v是否存在,以及是否有修改。...目标 有时候目标并不是真实要生成的文件,比如我们要用Makefile调用simv来仿真,并不存在一个叫做sim的目标文件,这种情况我们称之为目标PHONY。...由于目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。 我们常常在Makefile的开头来用.PHONY显式指明目标。...我们常需要在仿真时提供一些选项,比如testcase名,是否是post仿真,是否要dump波形。那么怎么实现呢?其实Makefile允许从命令行提供额外的变量,格式为OPTION=value。...这样在顶到make clean时,将自动递归到所有的子目录。

1.7K40

芯片设计中的Makefile简明教程

tb.sv和dut.v是依赖,执行命令前会先检查tb.sv和dut.v是否存在,以及是否有修改。...目标 有时候目标并不是真实要生成的文件,比如我们要用Makefile调用simv来仿真,并不存在一个目标文件,这种情况我们称之为目标PHONY。 示例二: sim: simv ....由于目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。 我们常常在Makefile的开头来用.PHONY显式指明目标。...我们常需要在仿真时提供一些选项,比如testcase名,是否是post仿真,是否要dump波形。那么怎么实现呢?其实Makefile允许从命令行提供额外的变量,格式为OPTION=value。...这样在顶到make clean时,将自动递归到所有的子目录。

1.9K50

快速上手makefile自动化构建工具

同样在makefile文件下,接着写下如下内容: clean: rm -f mybin   clean 依赖的文件为空,也就是clean 不依赖任何文件,而clean的依赖方法就是删除形成的可执行程序...其实这是因为每个文件存在着三种时间,而make命令则是根据某个时间来判断你的文件是否更改过,是否更新过,再继续做出判断到底执不执行make。...其实也是有的,这里就需要补充一点新的语法: .PHONY:目标文件#修饰目标文件,使之成为目标,总是被执行   可以看到,加上 .PHONY 修饰之后,我们make就可以多次使用了,其实修饰目标就是...而我们一般遵循着目标修饰清理工作,编译工作还是交给编译器的选择,以时间的更新来判断执不执行make,但是 清理工作是一定要执行 的,所以我们 通常把.PHONY修饰需要清理的目标文件。...测试是否是自底向上执行依赖方法: ✈️ 总结:  makefile有一个重要概念——依赖关系和依赖方法,依赖关系又有目标文件和依赖关系列表。

9710

makefile

PHONY是一个目标,rm前的-告诉make也许某些文件会出现问题,但不要管,继续clean makefile的文件系统 如果你不想使用makefile或者Makefile的文件名,可以用make -...makefile中包含其他makefile的指令如同c++ 一样: -include foo.make a.mk b.mk c.mk e.mk f.mk 减号仍然表示不管怎样报错继续执行下去,上面的命令可以采用部分正则规则简化...: -include foo,make *,mk $(bar) 工作方式 读入所有的Makefile。...为所有的目标文件创建依赖关系链。 根据依赖关系,决定哪些目标要重新生成。 执行生成命令。 书写规则 make支持三个通配符: *,?.../headers make的目标特性可以一次生成多个可执行文件: all : prog1 prog2 prog 3.PHONY : allprog1 : prog1.o utils.o cc

1.1K20

跟我一起写 Makefile(二)

通过上述分析,我们知道,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面定义的命令将不会被自动执行,不过,我们可以显示要make执行。...即命令——“make clean”,以此来清除所有的目标文件,以便重编译。...于是在我们编程中,如果这个工程已被编译过了,当我们修改了其中一个源文件,比如file.c,那么根据我们的依赖性,我们的目标file.o会被重编译(也就是在这个依性关系后面定义的命令),于是file.o...上面文件内容中,“.PHONY”表示,clean是个目标文件。 关于更为详细的“隐晦规则”和“目标文件”,我会在后续给你一一道来。...:                 -rm edit $(objects) 前面说过,.PHONY意思表示clean是一个“目标”,。

21530

一步步写属于自己的makefile

# gcc -c hello.c .PHONY: clean # 目标的意义就是,无论如何执行下面的命令 clean: rm -f hello hello.o 2 如何编写多个源文件的...: clean # 目标的意义就是,无论如何执行下面的命令 clean: rm -f hello $(OBJS) 这样的写法是不是比方法1的简洁许多?....o目标文件 # 如果此处只有一个依赖文件,比如hello.o,也可以用$<替代$^ .PHONY: clean # 目标的意义就是,无论如何执行下面的命令 clean: rm....o目标文件 # 如果此处只有一个依赖文件,比如hello.o,也可以用$<替代$^ .PHONY: clean # 目标的意义就是,无论如何执行下面的命令 clean: rm....$$$$ include $(C_DEPS) .PHONY: clean # 目标的意义就是,无论如何执行下面的命令 clean: rm -f $(TARGET) $(OBJS

62230

Makefile总结

,在一个大型的项目中往往有成百上千个文件,不仅书写起来麻烦,编译也消耗很长的时间,Makefile可以很好的解决这个问题,编译过程会判断文件是否有过修改,只对修改的文件重新编译生成目标文件,不仅提高了效率.../build/obj/$@ clean: $(RM) $(OBJ) $(BIN) 目标 有时候我们通过make指定目标来执行特定的命令,这个目标不是真正的文件名,称为目标。...也可以把目标称为标签。...这种情况可以使用目标来解决,可避免在makefile中定义的执行命令目标和当前目录下实际文件名冲突。 一旦定义为目标,make执行规则不会去查找隐含规则,同样也提高了效率。...在上边的Makefile中把clean定义为目标即可 .PHONY:clean 还有个特表的目标 all ,如我们通过Makefile创建多个可执行文件时,可以使用到: 如: all: bin1 bin2

95010

Linux之make和makefile及其拓展

文章目录 make和makefile 基础知识 make/makefile的使用 目标 三个时间 推导规则 小程序进度条 缓冲区问题 倒计时程序 进度条 make和makefile 基础知识...依赖关系),我没钱了,打钱(依赖方法) 同理,对于makefile来说,基于mytest.c生成mytest文件(依赖关系),需要执行gcc mytest.c -o mytest命令(依赖方法) 目标...观察makefile文件发现:clean用.PHONY修饰了,而mytest没有 被.PHONY修饰的就是目标,而目标可以不遵守规则,因此可以多次反复执行。...三个时间 不加目标make无法多次执行的原因在于目标文件没有更新,不用重新编译(在一些大型工程项目中,仅是编译的过程就可能要耗费数十分钟甚至几小时) 那么它怎么知道我没有更新目标文件呢?...这里就依赖于文件属性中的时间了 对于mytest来说,一定是先有的mytest.c才有的mytest,所以如果mytest的时间modify时间比mytest.c的modify时间要早说明近期对mytest.c

3.8K00

【Linux】自动化构建工具-makeMakefile详解(6)

可见,makefile成为了一 种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...结论: make指令会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译 在任何操作中,一定是先有源文件(.c),才有可执行程序(.exe) 一般而言,可执行程序的时间一定比源文件更加新...如果我们更改了源文件,此时源文件就比可执行程序要更加新,此时执行make就可以实现;反之则会出现"is up to date"的反馈 五. 【.PHONY】与目标的应用 引入:而我们需要怎么样才能够让...make每次执行呢?...使用【.PHONY】修饰mycode,令其成为目标 目标的特性是,总是被执行的; 常规应用: 【.PHONY】修饰clean,让clean对应的依赖方法每次都被执行 六.特殊符号【$@】【$^

21710

5个编写高效Makefile文件的最佳实践

例如,我们可以将编译器的路径、编译器选项和库路径放入变量中。此外,我们还可以在变量中存储其他有用的信息,例如项目名称、版本号等。...例如,我们可以使用以下规则来编译所有的.c文件: %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ 这个规则指定了一个目标模式%.o,表示任意以.o结尾的目标文件。...通过这个规则,我们可以轻松地编译所有的.c文件,而不需要为每个文件编写一个单独的规则。 --- 使用.PHONY规则 .PHONY规则可以使我们更加精确地指定Makefile文件中的目标。...它告诉make命令,某个目标是一个目标,不是一个实际的文件名。...例如,我们可以使用以下规则来定义.PHONY目标: .PHONY: all clean all: $(TARGET) clean: rm -rf $(OBJS) $(TARGET) ---

28220
领券