首页
学习
活动
专区
工具
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自动化构建工具

伪目标.PHONY 对于上述makefile,我们连续执行多次make就会发现,不能执行 但是我们如果连续指向多次make clean,它并没有出错 到这里一个可能想到是.PHONY的作用了;那这到底是什么呢...又为什么被称为伪目标呢?...伪目标:.PHONY修饰,伪目标它总是被执行的;像clean这种的目标文件,一般都设置成伪目标 对于这个,可以解释为: 伪目标clean不依赖于任何文件,执行make clean生成clean目标文件就会执行依赖方法...这里虽然说clean是一个目标文件,但在依赖方法中并没有生成clean文件。(也许是因为没有生成clean目标文件,才称为伪目标) 3....那又是根据哪个时间来判断是否执行呢? 答案是Modify文件内容修改时间 我们可以看到上图中目标文件的Modify时间是晚于依赖文件的,所以就不能为执行。

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

    85940

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

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

    8210

    深度解析Linux中的makeMakefile的使用方法

    :mytest 那么我们从上面扫描下来第一个生成的还是这个mytest 然后我们进行命令的执行 那么就说明我们的.PHONY冒号后面修饰的伪目标代表的含义: 所依赖的方法:总是被执行的!...说白了,凡是用.PHONY修饰的伪目标它的依赖方法和依赖关系总是会被执行的 因为我们的清理总是需要进行执行的,所以我们这里的clean是需要被.PHONY进行修饰操作的 为什么没有添加.PHONY修饰的文件不能多次进行...make操作 那么我们就能再次进行编译操作了 那么到底是否能够重新进行编译的话取决于我们源文件和这个可执行文件的时间前后 那么我们这里重谈:我们的.PYHTON:将我们后面的文件作为伪目标,可以总是被执行的....c文件都筛选出来 我们SRC后面的是一个命令,我们先进行命令的执行操作 最后我们测试下我们能否将所有的.c文件都打印出来 使用make命令发现是可行的,确实是可以提取出我们的所有的.c文件 我们可以发现是两行...,然后将这些文件都> 放在SRC这个变量里面 3 4 SRC=$(wildcard *.c)#将当前文件夹内的.c文件都罗列出来,然后将这些文件都放 在SRC这个变量里面 5

    22910

    自动化构建-makeMakefile 【Linux基础开发工具】

    不同厂家的make可能会稍有不同,并且语法上也有区别,不过基本思想都差不多,主要还是落在目标依赖上,最广泛使用的是GNUmake。 2、语法规则 目标 ... : 依赖 ......七、伪目标 .PHONY 伪目标只是一个标签,clean是个伪目标没有依赖文件,只有用make来调用时才会执行 当目录下有与make 命令 同名的文件时 执行make 命令就会出现错误。...: clean ALL 通常也会把ALL设置成伪目标 八、其他常用功能 代码清理clean 我们可以编译一条属于自己的clean语句,来清理make命令所产生的所有文件,列如 SRC = $(wildcard...即命令⸺“make clean”,以此来清除所有的目标文件,以便重编译。 • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。...• 可以将我们的 hello 目标文件声明成伪目标,测试一下。 什么叫做总是被执行?

    14210

    【Linux系统编程】—— 自动化构建工具Makefile指南

    背景 Makefile 是衡量开发者是否具备完成大型工程能力的一个重要标志。在一个工程中,源文件的数量可能极多,这些文件会按照类型、功能或模块分布在多个目录中。...大多数 IDE 都支持类似的功能,例如 Delphi 的 make,Visual C++ 的 nmake,以及 Linux 下的 GNU make。...由于 clean 不直接或间接依赖于第一个目标文件,因此需要显式执行: make clean 设置 .PHONY 伪目标可确保 clean 总是被执行: .PHONY: clean clean: rm...-f code .PHONY 的作用 .PHONY 让 Makefile 忽略源文件与可执行目标文件的时间对比,总是执行伪目标的命令。...$^: 代表依赖⽂件列表 @echo "linking ... $^ to $@" %.o:%.c # %.c 展开当前⽬录下所有的.c。

    13610

    【Liunx篇】基础开发工具-自动化构建-makeMakefile

    伪目标 .PHONY  当我们第一次编译好mytest,后面我们再想编译它却不允许我们编译了,这是为什么呢?...我们再来一段演示: 我们让.PHONY修饰以下目标文件mytest 我们查看代码时从上向下扫描,第一个遇到的就是.PHONY:mytest make一下 所以我们.PHONY修饰的目标文件代表的含义是...重谈.PHONY .PHONY修饰一个符号表示它为为目标,作用:总是被执行的。 如何做到的呢?在gcc这里是忽略对比时间,.PHONY下面的这条命令总是被执行。...第一种: 表示把当前所有的.c文件罗列出来,罗列出来后全部放进SRC中 第二种:makefile提供了一个基本的函数wildcard,其实与上面是等价的 我们要把所有的源文件全部更换成同名.o...@表示所形成的目标文件(BIN) 用所有的.c形成.o 其中%叫做通配符,表示匹配任意内容,%.c表示匹配任意以.c结尾的文件。

    9710

    Makefile

    例如在Ubuntu下,使用以下命令: $ sudo apt update $ sudo apt install build-essential 安装完成后,可以输入以下命令验证安装是否成功: $ make...CC=gcc:变量 CC 的值是 gcc,表示所使用的编译器。 SRC=$(wildcard *.c):SRC 表示当前目录下所有的 .c 文件,使用 wildcard 函数动态生成。...RM=rm -f:删除命令,用于清理目标文件和中间文件。 $(wildcard *.c) 用于匹配当前目录下的所有.c文件。 $(SRC:.c=.o) 将所有的.c文件替换为.o文件。...$@ 表示目标文件。 $< 表示第一个依赖文件。 $^ 表示所有依赖文件。 .PHONY 声明clean为伪目标,避免与同名文件冲突。...$列出的第一个依赖文件。 通过这些示例,可以清楚地理解这些符号的用途及功能。

    12410

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

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

    59950

    Makefile学习1

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

    39510

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

    15010

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

    4.1K53

    【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文件,这样少去做一些事,自然会改善性能,并且不用担心当前文件夹下是否有同名的文件

    22410

    【Linux】————Makefile编写

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

    9510

    深度刨析makefile

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

    13210

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