首页
学习
活动
专区
工具
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的修改时间来判断是否要重新编译!

85040
  • Linux项目自动化构建工具-makemakefile

    Visual C++的nmake,Linux下的GNU的make.可见,makefile成为了一种在工程方面的优秀编译方法。...那么问题来了:make是如何判断文件是否被修改的呢?...那有没有办法让make强制去编译,不去看文件是否改变呢? 当然也是可以的。 只需要添加.PHONY,我们将它设置为目标,用.PHONY修饰,目标的特性是,总是被执行的。...像clean这种,没有被第一个目标文件直接或间接关联,那么它后面定义的命令将不会被自动执行,不过我们可以显示要make执行,即命令:make clean,以此来清理所有的目标文件,以便于重新编译。...但是一般我们这种clean的目标文件,我们将它设置为目标,用.PHONY修饰,目标的特性是,总是被执行的。

    8010

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译的核心原理和最佳实践

    每个 .o 文件通过相应的 gcc 命令编译。 清理目标:clean 是一个目标,用于清理生成的文件。 常用命令 make:使用默认目标(Makefile 中第一个定义的目标)进行构建。....PHONY 在 makefile 中,.PHONY 用于声明「目标」(phony targets),即不直接对应文件的目标。这些目标通常是一些执行操作的命令,而非生成文件。...而加上 .PHONY 后,make 会忽略同名文件,直接执行目标。...这是因为 .PHONY 告诉 make,clean 是个目标,不对应于一个文件。....PHONY 保证目标总是执行 当目标被声明为 .PHONY 后,每次调用它时,make 不会检查其是否已经完成,而是始终执行目标的命令,这对一些清理、测试或其他重复操作特别有用。

    35350

    Makefile学习1

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

    38510

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

    12810

    【Linux必备工具】自动化构建工具makefile的使用详解

    target可以是一个目标文件、执行文件,甚至可以是一个标签【后面会提到的目标】。 依赖方法前面必须加 Tab空格键。 依赖方法以gcc为例,也可以是其他的shell指令【command】。...例如:上面的gcc test -o test.c 2.2.4 目标 目标目标是指在 Makefile 中.PHONY定义的不对应实际文件的目标,通常用于执行一些特定的操作,比如清理临时文件...Access时间不是每次访问时更改,读取查看文件操作最频繁,如果每次改的话,比较浪费时间,因为文件一般都在磁盘存放,更改时间的本质就是访问磁盘。...3.2 .PHONY修饰的目标总是被执行 .PHONY 配置项的目标clean并不是其他文件生成的实际文件,使make命令会自动绕过隐含规则搜索过程,也就是说执行命令make clean会自动忽略名为...【通俗一点说】:.PHONY 修饰的目标clean并不是某个依赖项生成的实际文件,因此make命令不再去搜寻当前文件夹下是否有clean文件,这样少去做一些事,自然会改善性能,并且不用担心当前文件夹下是否有同名的文件

    14410

    【Linux】————Makefile编写

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

    6910

    深度刨析makefile

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

    11310

    【手把手系列】:芯片设计中的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自动化构建工具

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

    13010

    芯片设计中的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

    # 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

    64530
    领券