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

是否所有的伪目标都需要用.PHONY列出?

在Makefile中,.PHONY是一个特殊目标,它用于声明伪目标(phony targets)。伪目标是不与任何文件名相关联的目标,它们实际上是一种约定,用于表示某些特殊的操作或任务。

回答你的问题,不是所有的伪目标都需要用.PHONY列出。只有在以下情况下,才需要使用.PHONY:

  1. 当伪目标与实际文件名冲突时:如果在目录中存在与目标同名的文件,make会将此目标视为已经最新,而不会执行对应的命令。使用.PHONY可以避免这种冲突。
  2. 当伪目标需要强制执行时:伪目标默认情况下只有在依赖的目标有变化时才会执行对应的命令。但有些任务可能需要每次都强制执行,例如清理操作或安装依赖。使用.PHONY可以告诉make无论依赖是否变化,都执行对应的命令。
  3. 当伪目标需要作为默认目标时:默认情况下,make会执行Makefile中的第一个目标。如果想要某个伪目标作为默认目标,可以使用.PHONY声明。

使用.PHONY的格式为:

.PHONY: target1 target2 ...

其中,target1、target2等为需要声明为伪目标的目标名。

腾讯云相关产品和产品介绍链接地址:

腾讯云产品:https://cloud.tencent.com/product

注意:在回答中不能提及具体的云计算品牌商,因此无法给出与腾讯云相关的具体产品推荐。您可以参考上述腾讯云产品链接,根据自己的需求选择合适的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【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的修改时间来判断是否要重新编译!

84440
  • Makefile学习1

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

    36310

    【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 会跳过依赖项的搜索和依赖项的更新检查。

    4K53

    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 修饰,目标的特性是,总是被执行的。

    10510

    【Linux】————Makefile编写

    预处理 就是展开所有的头文件、 替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。...编译源文件,需要用到gcc,之前所讲过的. gcc test.c -o mytest 这样一个简单的Makefile文件便写好了..../执行这个文件,发现程序成功运行了. 3. .PHONY 那如果我们想清理某个文件,该怎么写呢?既然是清理文件那还需要依赖什么文件删除吗? 这个时候需要用一个东西叫 .PHONY目标....因为我们clean目的是清除某些文件,而删除操作又不会需要依赖文件,所以会创建一个目标,相当于依赖这个目标,然后执行依赖方法....可以发现这里的意思是说mytest已经是最新了.但是我就是想让它每次执行,这个时候你在前面加上.PHONY即可: 然后退出,便可以每次都被执行了.

    6110

    【手把手系列】:芯片设计中的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.8K40

    深度刨析makefile

    最常见的使用目标的例子就是 make clean ,我们执行 make clean 可以把所有的目标文件删除 .PHONY:clean all clean: -@rm -f *.o -@rm exe...声明为目标就可以解决这个问题,其实就是把 clean 作为特殊目标 .PHONY 的依赖,这样就保证了不管当前是否有 clean 同名文件,目标后面的命令都可以执行,并且 make 不会去推导构建目标的隐含规则...(2)GNU 编译、安装、打包相关的目标 下面列出的这些目标都是 GNU 的一些定义,我们在定义实现下面功能的目标时,应尽量使用下面列出目标名称。...① 特殊目标 名称 功能 .PHONY: 这个目标的所有依赖被作为目标。...解决方法是,在命令前加一个 - (Tab 键与命令之间),这样不管命令是否出错,是否返回0,认为运行成功。

    9910

    芯片设计中的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有一个重要概念——依赖关系和依赖方法,依赖关系又有目标文件和依赖关系列表。

    12110

    一步步写属于自己的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

    63530

    跟我一起写 Makefile(二)

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

    22130

    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总结

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

    96310
    领券