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

在Makefile中使用.PHONY目标作为变量

在Makefile中,.PHONY目标是一个特殊的目标,用于声明一个伪目标(phony target)。伪目标是指在Makefile中定义的目标,其实际上并不对应任何实际的文件,而是用于执行一系列命令或其他目标。

.PHONY目标的作用是告诉make工具,该目标不对应任何实际的文件,无论是否存在同名的文件,都需要执行该目标下定义的命令或其他目标。

.PHONY目标通常用于定义一些常用的操作,比如clean、install等,以便在执行make命令时可以直接指定这些目标,而无需指定具体的文件依赖。

.PHONY目标的语法如下:

.PHONY: target1 target2 ...

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

优势:

  1. 方便管理:使用.PHONY目标可以方便地管理一些常用的操作,如清理、安装等,使Makefile更加清晰易读。
  2. 避免冲突:由于.PHONY目标不对应实际的文件,避免了与同名文件产生冲突的问题。
  3. 提高效率:使用.PHONY目标可以避免make工具对文件进行不必要的检查和重新编译,提高了构建的效率。

应用场景:

  1. 清理操作:通常将clean操作定义为.PHONY目标,用于清理生成的中间文件、可执行文件等。
  2. 安装操作:将install操作定义为.PHONY目标,用于将编译生成的文件安装到指定位置。
  3. 构建操作:可以将一些常用的构建操作定义为.PHONY目标,如编译、链接等。

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

  1. 云服务器(CVM):https://cloud.tencent.com/product/cvm
  2. 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb_mysql
  3. 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  4. 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  5. 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  6. 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  7. 云存储(COS):https://cloud.tencent.com/product/cos
  8. 腾讯区块链服务(TBCS):https://cloud.tencent.com/product/tbcs
  9. 腾讯元宇宙(Tencent Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile教程

Makefile我们要定义一系列的变量变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 4.文件指示。...后面的每个目标文件皆是如此做法。 (9)伪目标使用。 .PHONY clean clean: rm -f *.o *.out 使用.PHONY关键字,指明clean是伪目标,仅作标签使用。...若将all放在所有目标文件的前面,则使用make即可,无需指明make all,原因是make命令将Makefile第一个出现的目标作为最终目标,若不放在最前面,则必须指明make all。...对于一般多字符变量的引用必须使用括号,否则make将把变量名的首字母作为作为变量而不是整个字符串($PATHMakefile实际上是$(P)ATH)。...其实可以使用Makefile的shell函数来执行shell脚本,因为shell函数把执行shell脚本后的输出作为函数返回,因此我们可以使用shell函数来为Makefile变量赋值。

3.9K53

make menuconfig执行流程分析

这样的目标作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则定义的命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义为一个伪目标,所以它作为依赖时总是被认为是最新的(比目标新),故有FORCE作为依赖的目标每次make时必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系...$(srctree)/scripts/Makefile.buildsrc变量的定义为: src := $(obj) PHONY := __build __build: # Init all...这样的目标作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则定义的命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义为一个伪目标,所以它作为依赖时总是被认为是最新的(比目标新),故有FORCE作为依赖的目标每次make时必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系

3.4K10

Makefile学习1

规则也可以没有命令,仅仅包含目标目标依赖,仅仅用来描述一种依赖关系,但一个规则中一定要有一个目标。 默认目标 一个Makefile文件里通常会有多个目标,一般会选择第一个作为默认目标。...Makefile文件a.out是文件的第一个目标,当我们make编译时没有给make指定要生成的目标,make就会选择Makefile文件的第一个目标作为默认目标。...应用: 立即展开变量一般用在规则目标目标依赖。make解析Makefile阶段,需要这些变量有确切的值来构建依赖关系树。...模式匹配,表示目标模式%的文件名部分 -: :告诉make在编译时忽略所有的错误 @: :告诉make执行命令前不要显示命令 变量替换 字符串替换 .PHONY: all SRC := main.c...如果不希望命令行指定的变量值替代Makefile的原来定义,那么我们可以Makefile使用指示符 override 对这个变量进行声明: .PHONY: all override web =

32710

Linux笔记(9)| 一步步深入Makefile

Linux编译代码,不像是Windows中有很多集成的IDE,Linux中都是通过基本的编译工具如gcc来进行,比如要编译main.c这个文件,可以使用gcc main.c -o main.但是如果源文件很多...mp3.o: gcc -c mp3.c -o mp3.o .PHONY:clean clean: rm mp3 2、Makefile变量:系统变量、自定义变量、自动化变量 (1)...(3)自动化变量 $< 第一个依赖文件 $^ 全部的依赖文件 $@ 目标 使用自动化变量可以使Makefile文件更好地修改,类似于C语言中使用宏定义来封装,比如将前面写的Makefile进行改造 cc...INC_DIR来保存头文件的路径,第二句是使用模式替换函数路径前加上-I,这是为了后面gcc 选项指定依赖的头文件路径。...第三句是头文件路径里的每一个头文件,并且通过第四句把每一个头文件作为.o的依赖文件,也就是当头文件发生变化时,编译器要重新编译生成.o文件。 完整Makefile代码 ARCH?

83950

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

一旦我们确定了这些问题,我们就可以编写Makefile文件并开始构建我们的项目。 --- 使用变量 Makefile变量可以使我们的代码更加模块化和可维护。...我们可以将常量放入变量,以便在整个Makefile重复使用。例如,我们可以将编译器的路径、编译器选项和库路径都放入变量。此外,我们还可以变量存储其他有用的信息,例如项目名称、版本号等。...CC = gcc CFLAGS = -Wall -O2 LIBS = -lm --- 使用自动变量 自动变量可以使我们规则引用目标和依赖关系,以及其他有用的信息。...--- 使用.PHONY规则 .PHONY规则可以使我们更加精确地指定Makefile文件目标。它告诉make命令,某个目标是一个伪目标,不是一个实际的文件名。...比如说,我们可以考虑Makefile文件添加一些注释,以帮助其他人更好地理解我们的Makefile

28020

make menuconfig makefile kconfig详解

b、目标和依赖描述放在同一行,目标和依赖描述使用冒号(:)分隔开;命令行在目标、依赖描述的下一行。当作为独立的命令行时此行必须以[Tab]字符开始。...这样的目标作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则定义的命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义为一个伪目标,所以它作为依赖时总是被认为是最新的(比目标新),故有FORCE作为依赖的目标每次make时必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCEKbuild体系...$(srctree)/scripts/Makefile.buildsrc变量的定义为: src := $(obj) PHONY := __build __build: # Init all...目标menuconfig定义scripts/kconfig/Makefile,找到menuconfig目标后,然后执行以menuconfig为目标的规则: PHONY += oldconfig xconfig

1.7K10

Linux里Makefile是什么?它是如何工作的?

make 工具需要读取一个 Makefile(或 makefile)文件,该文件定义了一系列需要执行的任务。你可以使用 make 来将源代码编译为可执行程序。...这是因为Makefile 的第一个目标为默认目标。通常情况下会调用默认目标,这就是你大多数项目中看到 all 作为第一个目标而出现。all 负责来调用它他的目标。... Makefile 文件开头增加 .DEFAULT_GOAL: .DEFAULT_GOAL := generate make 会将 generate 作为默认目标: $ make Creating empty...进阶示例 变量 之前的实例,大部分目标和预置条件是已经固定了的,但在实际项目中,它们通常用变量和模式来代替。 定义变量最简单的方式是使用 = 操作符。...本例,如果 SRCS 的值为 ‘foo.c bar.c’,则 BINS的值为 ‘foo bar’。 all: {BINS} 行:伪目标 all 调用 {BINS} 变量的所有值作为目标

3.3K31

Makefile入门

它们Makefile的格式如下: 目标(Target):目标是指需要生成的文件或目标体,可以是Object File(一般称为中间文件)、可执行文件或标签。...这些命令描述了如何从依赖文件生成目标文件。Makefile,命令部分需要有一定的缩进,可以是一行或多行,它们会依次执行。...1、延迟赋值 Makefile变量的默认赋值方式是“延迟”的。...这意味着变量只有在被引用时才会被计算,并且只计算一次。如果一个变量多个地方被引用,那么只有第一次引用时会被计算,后续的引用会使用第一次计算的结果。...这意味着变量会在声明时立即被计算,并且之后的所有引用中都会使用这个计算结果。即使变量的值在后续发生了变化,之前的引用也不会受到影响。

9910

makefile终极奥义

如果找到,它会找文件的第一个目标文件(target),在上面的例子,他会找到“app”这个文件,并把这个文件作为最终的目标文件。...上述还只是简单的makefile,属于「显式规则」,那么为了优化makefile我们介绍「隐式规则」 makefile使用变量 Makefile我们要定义一系列的变量变量一般都是字符串,这个有点...Makefile变量有四种定义(赋值)方式: 1,简单赋值( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效(推荐使用) 2,递归赋值( = )赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响...OBJ:=main.o #定义变量 #引用变量 ${OBJ} #使用变量 $(OBJ) #推荐使用 除了自己定义的变量之外makefile还提供了预定义的变量 隐含规则的命令,基本上都是使用了一些预先设置的变量...函数 Makefile可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。

1.3K30

Go项目中Makefile的简单使用

目标变量目标最早先的一个例子,我们提到过一个“clean”的目标,这是一个“伪目标”,clean: rm *.o temp更为稳健的做法是:.PHONY : cleanclean :...变量使用(1)变量的声明:变量声明时需要给予初值,而在使用时,需要给变量名前加上 $ 符号,但最好用小括号 () 或是大括号 {} 把变量给包括起来。...变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的变量名。传统的Makefile变量名是全大写的命名方式,但我推荐使用大小写搭配的变量名,如:MakeFlags。...3.2 Go项目的常用命令为什么要说一下Go的常用命令呢,因为Go项目中Makefile使用较为简单,大多都是对Go命令的一些执行操作,因此我们首先要熟知Go语言中的常用命令,才能更好的编写Makefile...3.3 使用实践项目目录:Makefile文件内容:.PHONY:tidytidy: go mod tidy.PHONY:buildbuild: go build .

52700

Makefile工程管理

Makefile规则:     1)先创建一个名称为 makefile 或者 Makefile 的文档;     2)文档里面输入相应的内容:       输入相应内容的时候,要遵循相应的规则。        ...目标项:这个就是你要生成的文件名;       依赖项:要生成目标项需要的文件;       编译命令:如果有依赖项生成目标项;必须以TAB开头;       makefile 文件里面可以有很多规则,...的伪目标:     1)使用 .PHONY 这个makefile的关键字来定义你的伪目标; .PHONY:clean rebuild     2)再编写对应的伪目标: clean: rm -f...=$(变量名)    //引用        Makefine 体现如下: SOURCE:=main.o sequence.o EXE:=main $(EXE):$(SOURCE) gcc...:clean rebuild clean: rm -f main.o main sequence.o rebuild:clean main     2)自动变量:       使用的时候,使用特定的值去替换

65320

golang工程通用构建方式

上线的服务是使用golang的哪个版本编译的? A引入了bouk/staticfiles等工具将工程目录下的文件嵌入到二进制程序,B如何方便的修改文件后同步更新asset文件?...Makefile文件,定义了工程通用的路径变量以及根据git describe --dirty --always --tags | sed 's/-/./2' | sed 's/-/./2'命名的结果获取工程的...git代码库状态作为工程的版本信息。...,其中编译包含: make build: 编译当目前操作系统系统目标的可执行文件 make build.all: 同时编译macos/windows/linux的64位可执行程序 使用上,还支持指定options...: 必须按照golang工程建议的规范根目录下的cmd目录下为每一个可执行程序建立单独包 使用go module作为依赖管理工具,仅支持golang的1.11,1.12版本 代码检查工具使用的是revive

2.1K61

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

:增加伪目标:.PHONY:clean: .PHONY:clean clean: rm $(obj) *.o 注意: clean的规则不要放在文件 的开头,不然,会变成make的默认目标,一般....PHONY:clean clean: -rm $(obj) *.o 变量 变量的定义 Makefile也支持变量定义,变量的定义也让的我们的Makefile更加简化,可复用。...赋值符'+=': Makefile变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号"+=": OBJ = main1.o main2.o OBJ += main3...这些变量可以让我们更加快速的完成Makefile的编写,其中自动变量只能在规则的命令使用,常用的自动变量如下: $@:规则目标 $<:规则的第一个依赖文件 $^:规则的所有依赖文件 CC...函数参数:原模式+目标模式+文件列表,使用方法: SRC = $(wildcard .

45520

芯片设计Makefile简明教程

目标 有时候目标并不是真实要生成的文件,比如我们要用Makefile调用simv来仿真,并不存在一个目标文件,这种情况我们称之为伪目标PHONY。 示例二: sim: simv ....我们常常在Makefile的开头来用.PHONY显式指明伪目标。 示例三: .PHONY: sim sim: simv ....那么我们为了防止出错通常把第一个目标定义成all(执行完整的流程)或者help(显示帮助菜单)。我更倾向于后者,可以帮助我们回忆如何使用Makefile脚本。.../simv -xxx 这样,当我们不记得如何使用Makefile的时候,直接敲make就会有使用帮助菜单。另外,我们还可以看到,一个目标后面可以执行多条命令,比如这里的三条echo命令。...Makefile中有几个特殊变量,如$@表示目标,$^表示依赖。

1.9K50

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

目标 有时候目标并不是真实要生成的文件,比如我们要用Makefile调用simv来仿真,并不存在一个叫做sim的目标文件,这种情况我们称之为伪目标PHONY。...我们常常在Makefile的开头来用.PHONY显式指明伪目标。 示例三: .PHONY: sim sim: simv ....那么我们为了防止出错通常把第一个目标定义成all(执行完整的流程)或者help(显示帮助菜单)。我更倾向于后者,可以帮助我们回忆如何使用Makefile脚本。.../simv -xxx 这样,当我们不记得如何使用Makefile的时候,直接敲make就会有使用帮助菜单。另外,我们还可以看到,一个目标后面可以执行多条命令,比如这里的三条echo命令。...Makefile中有几个特殊变量,如@表示目标,^表示依赖。

1.7K40

makefile从入门到放弃——博主吐血整理的笔记

可以makefile目标前加上.PHONY:'目标名' makefile变量 makefile的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,Makefile执行的时候其会自动原模原样地展开在所使用的地方...其与C/C++所不同的是,你可以Makefile改变其值。makefile变量可以使用在“目标”,“依赖目标”, “命令”或是Makefile的其它部分。...makefile文件的特殊变量VPATH就是完成这么一个功能,如果没有指明这个变量,make只会在当前目录中去寻找依赖文件和目标文件。...我们也可以 Makefile 为这个变量赋一个新的值,当然重新赋值后这个变量将不再代表 make 的工作目录。...Makefile 还有两个变量不管是不是使用关键字 “export” 声明,它们总会传递到下层的 Makefile

1.6K20

Makefile学习2

Makefile学习2 Makefile条件判断 使用条件判断,可以让make在编译程序时,根据不同的情况,执行不同的分支:可以执行不同的命令,使用不同的编译参数,生成不同的目标。...ifdef 关键字 ifdef 关键字用来判断一个变量是否已经定义。如果变量的值非空(Makefile,没有定义的变量的值为空),表达式为真。...Makefile可以使用的通配符有:* 、? 、 […]。通配符的使用方法和含义和在shell中一样。 通配符 使用说明 * 匹配0个或者是任意个字符 ?...匹配任意一个字符 [] 我们可以指定匹配的字符放在 “[]” 除此之外,Makefile还有经常使用的几个自动变量也可以看做特殊通配符: $@:所有目标文件 $^:目标依赖的所有文件 $<:第一个依赖文件...:所有更新过的依赖文件 Makefile,通配符主要用在两个场合: 用在规则的目标和依赖:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $

29310

Go 项目使用 Makefile

是“命令”,可以 prerequisites 后面,使用分号分隔,也可以另起一行,但是必须以开头,如果想要使用其他键,可以使用内置变量 .RECIPEPREFIX 声明。...03 Go 项目使用 Makefile Go 项目中使用 Makefile,一般我们只会使用“伪目标”,我们使用 go build 构建可执行文件为例,介绍 Go 项目怎么使用 Makefile。...APP,命令行中使用 $(APP) 调用变量,并且 GOOS 指定操作系统,使用@开头,不再打印执行命令。...不必如此,我们可以 Makefile 编写一个“伪目标” help,用于描述 Makefile 的“伪目标”列表和使用示例等。...一般将 help 作为 Makefile 的第一个“伪目标”,我们可以执行 make 或 make help 命令,输出使用方法。

1.7K20

Make

###二、Make的一般使用: 1、Makefile的基本构成: Makefile由规则构成,一条规则生成一个或多个目标文件,其格式如下: 目标文件列表 分隔符 依赖文件列表 [;命令] //[]的内容可选.../headers表示../headers目录下搜索所有.h结尾的头文件。 变量makefile通常可定义变量,make执行时会把变量名出现的地方用变量值代替。...=:在此之前没有给该变量赋值才会给该变量赋值 +=:追加变量值,与原变量值之间用空格隔开 预定义变量makefile 预定义了许多变量,隐含规则通常会用到这些变量: 宏名 初始值...: 建立和维护库时,把库名作为目标文件,需要加入库的文件作为依赖文件。...-f filename或者--file=FILE或者--makefile=FILE:使用指定文件作为makefile文件。

1.9K100
领券