makefile中的伪目标,强制目标和双冒号规则

Makefile系列之规则 规则 语法 TARGETS:PREREQUISITES (; COMMAND) COMMAND … TARGETS : 目标,可以是空格分开的多个文件,也可使用通配符; PREREQUITITES : 依赖,根据依赖更新后是否需要重建目标,将依赖分为两种,用“|”进行分割,“需要|不需要”,把更新后不需要重建目标的依赖称为“order-only”依赖; COMMAN... 阅读详情

----伪目标----

target :

commands

如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。

如果makefile 所在目录下存在target 同名文件:make target 则commands 不被执行,认为target 总是最新的。

 

.PHONY:target

target:

commands

不论makefile 所在目录下存不存在与target 同名文件,make target 导致commands 的执行,与上一种写法的区别是引用'.PHONY' 的意义所在。

 

-----强制目标-----

target:

因为没有命令,所以make target ,与makefile 所在目录下是否存在与target 同名的文件没有直接关系。

 

-----双冒号规则-----

target::

commands

无论makefile 所在目录下存不存在与target 同名文件,make target 导致commands 的执行,与使用'.PHONY' 定义的伪目标效果相同。


-----------------------------------------------------------------

----------1

.PHONY target

all:target

commands1

# 伪目标

target:

commands

----------2

all:target

commands1

# 伪目标

target:

commands

---------3

all:target

commands1

# 强制目标

target:

---------4

all:target

commands1

# 双冒号规则

target::

commands

 

1 和4make all 执行情况相同,无论makefile 所在目录下存不存在与target 同名文件,commands1 和commands 都被执行。

2 和3make all 执行情况在makefile 所在目录下存在与target 同名文件,commads 不被执行( 认为target 目标是最新的) ,commands1 将被执行;而如果不存在与target 同名的文件,则2 运行效果与1 和4 相同,3 运行将导致commands1 的执行。

 

>rm *

>vim Makefile

>cat -n Makefile

1 .PHONY:target1

2 all1:target1

3 echo "all1_target1_.PHONY_command_all1"

4 target1:

5 echo "all1_target1_.PHONY_command_target1"

6

7 all2:target2

8 echo "all2_target2_command_all2"

9 target2:

10 echo "all2_target2_command_target2"

11

12 all3:target3

13 echo "all3_target3_force_command_all3"

14 target3:

15

16 all4:target4

17 echo "all4_target4_::_command_all4"

18 target4::

19 echo "all4_target4_::_command_target4"

20


>make all1

echo "all1_target1_.PHONY_command_target1"

all1_target1_.PHONY_command_target1

echo "all1_target1_.PHONY_command_all1"

all1_target1_.PHONY_command_all1

>make all2

echo "all2_target2_command_target2"

all2_target2_command_target2

echo "all2_target2_command_all2"

all2_target2_command_all2

>make all3

echo "all3_target3_force_command_all3"

all3_target3_force_command_all3

>make all4

echo "all4_target4_::_command_target4"

all4_target4_::_command_target4

echo "all4_target4_::_command_all4"

all4_target4_::_command_all4

 

>touch target{1,2,3,4}

>ls

>make all1

echo "all1_target1_.PHONY_command_target1"

all1_target1_.PHONY_command_target1

echo "all1_target1_.PHONY_command_all1"

all1_target1_.PHONY_command_all1

>make all2

echo "all2_target2_command_all2"

all2_target2_command_all2

>make all3

echo "all3_target3_force_command_all3"

all3_target3_force_command_all3

>make all4

echo "all4_target4_::_command_target4"

all4_target4_::_command_target4

echo "all4_target4_::_command_all4"

all4_target4_::_command_all4

-----------

以上测试在GNU Make 3.81 版本进行

 

[xboard]03-Makefile解读之make规则 摘要:本文介绍了Makefile中各种规则变体及其应用场景。从标准规则格式(target-prerequisites-recipe)入手,详细讲解了强制执行的FORCE伪目标、空命令规则、双冒号规则、静态模式规则和多模块子目录管理等高级用法。通过具体示例展示了每种规则的特点和实际应用,帮助读者理解复杂项目(如uboot/Kernel)中的Makefile实现机制。这些技巧对处理大型项目的自动化编译流程至关重要。 阅读详情

相关推荐

makefile文件中伪目标all的作用以及解析

makefile文件中伪目标all的作用以及解析

Makefile基础教程(伪目标)

本篇文章将讲解Makefile中的伪目标,Makefile的目标在前面的文章中我们已经讲解了那么这篇文章我们就来讲讲伪目标。前面我们都是使用的.PHONY来定义一个伪目标的,在这里也可以不使用.PHONY来定义伪目标。在clean后面加一个FORCE依赖。这个FORCE依赖在后面也作为一个目录使用,当一个目标没有命令或者依赖并且他也不是一个文件名时认为这个目标永远都是最新的。所以无论目录下是否存在clean文件执行make clean都可以达到我们想要的效果。rm * . o。

m0_49476241的博客 3210

事件相机数据处理实战:从原始事件流到视觉表征的三种核心方法

本文深入探讨了事件相机数据处理的核心环节,即如何将异步、稀疏的原始事件流转换为深度学习模型可处理的视觉表征。文章重点解析了三种核心方法:逐通道累积、体素网格双线性插值和对称累积事件表示,详细阐述了其原理、代码实现、可视化效果及各自的适用场景,为事件相机在目标识别、光流估计等视觉任务中的高效应用提供了实战指南。

read5的博客 439

make: *** 没有规则可制作目标“distclean”。 停止。_Makefile伪目标

这一个章节我们主要讲的是 Makefile 中的伪目标。所谓的伪目标可以这样来理解,它并不会创建目标文件,只是想去执行这个目标下面的命令。伪目标的存在可以帮助我们找到命令并执行。使用伪目标有两点原因:避免我们的 Makefile 中定义的只执行的命令的目标和工作目录下的实际文件出现名字冲突。提高执行 make 时的效率,特别是对于一个大型的工程来说,提高编译的效率也是我们所必需的。我们先...

weixin_39614521的博客 1万+

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

带有验证码的爆破(包含Burp suite工具爆破)

关于含有验证码爆破的一些总结!

weixin_43960066的博客 8698

Makefile双冒号的使用规则

双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令)。 首先需要明确的是:Makefile中,一个目标可以出现在多个规则中。但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同类型的规则中。双冒号规则和普通规则的处理的不同点表现在以下几个方面: 1、双冒号规则中,当依赖文件比目标更新时。规则将会被执行。对于

q1449660223的博客 999

RK3566添加ffpeg【Buildroot系统】

有很多人都发现了RK3566系列的芯片是不可以直接使用ffmpeg官网源码的!会报错: Not a video capture device. /dev/video0: No such device 接下来我们就来解决这个问题!!

honmy18的博客 4070

Makefile双冒号规则

当一个目标出现在多个规则中时,即一个目标被定义多次,Makefile的处理是合并它们的依赖,用最后一个规则中的命令;当你想要目标根据不通的依赖做不通的动作时,双冒号规则就派上用常了. 另外一个目标不能同时出现的双冒号和单冒号规则中;多说无用,举例如下: 当 make single时,假如当前目录无a.c和b.c,打印如下: 首先是warning,一个目标出现在了多个规则中,配方方法配替换为最后一个;其次我们看到a.c被touch,说明依赖是合并的,最后看到a.c的删除未执行,说明被后面的替换掉了; 下面

小鱼儿的专栏 974

控制算法研发工程师(博士)职位深度解析与面试指南

摘要:广东万和新电气股份有限公司招聘控制算法研发工程师(博士),工作地点佛山顺德。职位要求2026届博士学历,电子信息工程或控制科学与工程专业。主要职责包括:1)燃气热水、热泵等系统的电控软件设计与优化;2)开发PID、模糊控制、ADRC、MPC等智能算法,应用于恒温控制、变频调节等场景。重点考察算法研发能力、系统稳定性优化及嵌入式实现经验。该职位提供三年资深工程师培养计划,需具备扎实的控制理论基础和工程实践能力,能够处理非线性系统、多工况自适应等复杂控制问题。

郑伟强dev的专栏 139

基于STM32F1XX 、HAL库的LTR-303ALS-01 环境光传感器驱动应用C语言程序设计

printf("制造商ID: 0x%02X\r\n", LTR303_ReadManufacID());printf("器件ID: 0x%02X\r\n", LTR303_ReadPartID());LTR-303ALS-01是一款数字环境光传感器(ALS),由Lite-On公司生产。printf("LTR-303ALS初始化失败!printf("LTR-303ALS初始化成功!printf("数据无效\r\n");* @param mode: 0-待机, 1-激活。

PP_Cottage的博客 1033

Makefile 文件中​伪目标详解

在 Makefile 中,​伪目标(Phony Target)​是一个不生成实际文件的目标,而是用于执行特定操作(如清理编译文件、运行测试等)。伪目标需要通过 .PHONY 声明,避免与同名文件冲突,确保命令始终执行。

浩瀚之水的专栏 769

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1728

Makefile 双冒号 ::

转自:              对makefile中:单冒号普通规则和::双冒号规则的理解             双冒号规则 双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令)。首先需要明确的是:Makefile 中,一个目

m0_37552597的博客 654

Orange3实战教程:文本挖掘---主题建模

主题建模通过LDA、LSI或HDP算法分析文档集合,自动发现隐含主题结构。组件输入为文档语料库,输出包括带主题权重的语料库、主题词分布及完整主题数据。不同算法特性各异:LSI允许正负权重但解释性较弱,LDA更易解释,HDP参数复杂需谨慎设置。结果可结合词云、热力图等可视化工具分析主题特征及分布。示例显示如何通过预处理文本、选择算法(如提取5个LDA主题),并利用MDS和箱线图探索主题间关系及关键词分布。

err2008的专栏 367

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

对makefile中:单冒号普通规则和::双冒号规则的理解 -转

原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c.c /gliethttp/%:: /gliethttp/%_shipped     @echo $@=$^     @touch $@ /gliethttp2/%::   

xp5xp6的博客 5950

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

linux 端口多个冒号,对makefile中:单冒号普通规则和::双冒号规则的理解

luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c.c/gliethttp/%:: /gliethttp/%_shipped@echo $@=$^@touch $@/gliethttp2/%::@echo $@=$^其中/gliethttp/下的a.c_shipped和b.c_shipped这2个依赖文件必须存在luther@gliethttp:...

weixin_32306957的博客 934

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Makefile学习笔记2

Makefile学习笔记2Makefile规则makefile中终极目标只有一个,必须是第一个。其他规则的书写顺序在makefile中没有意义 多目标中,第一个将会被作为终极目标。终极目标是执行make的唯一目的,其所在的规则作为第一个被执行的规则。而其他的规则时在完成重建“终极目标”的过程中被连带出来的。所以这些目标所在的规则在Makefile中的顺序无关紧要。依赖的类型两种依赖关系: 1.

奔跑的程序猿 732

Makefile规则③规则语法、依赖、通配符、目录搜寻、目标

规则语法   通常规则的语法格式如下:     TARGETS : PREREQUISITES       COMMAND       ...   或者:     TARGETS : PREREQUISITES ; COMMAND       COMMAND       ...   规则中“ TARGETS”可以是空格分开的多个文件名,也可以是一个标签(例如:执行清空的“ cle...

weixin_30877493的博客 286

makefile教程7

一、实验介绍--Makefile 规则进阶(3) 本次实验将介绍强制目标、多规则目标、多目标规则、静态模式、双冒号规则的使用。 1.1 实验内容 强制目标的使用多规则目标的使用多目标规则的使用静态模式的使用双冒号规则的使用1.2 实验知识点 强制目标没有命令或依赖,且其目标是一个不存在的文件名,可以起到强制更新依赖其的目标的作用。一个目标文件可以对应到多个规则目标,make 会合并其依赖项,...

yang__jing的博客 277

Makefile基础教程 7

一、实验介绍--Makefile 规则进阶(3) 本次实验将介绍强制目标、多规则目标、多目标规则、静态模式、双冒号规则的使用。 1.1 实验内容 强制目标的使用多规则目标的使用多目标规则的使用静态模式的使用双冒号规则的使用 1.2 实验知识点 强制目标没有命令或依赖,且其目标是一个不存在的文件名,可以起到强制更新依赖其的目标的作用。一个目标文件可以对应到多个规则目标,make 会

oxuzhenyi的博客 654

makefile 学习笔记 六:makefile 写规则

详细内容见 《GNU make》 4 Writing Rules 章节。 一个规则出现在 makefile 中,并说明何时以及如何重制某些文件,称为规则的目标(通常每个规则只有一个目标)。它列出了作为目标先决条件的其他文件,以及用于创建或更新目标的配方。 规则的顺序并不重要,除了确定默认目标:make 要考虑的目标(如果未以其他方式指定目标)。默认目标是第一个 makefile 中的第一个规则的目标。如果第一个规则有多个目标,则只有第一个目标作为默认值。有两个例外:以句号开头的目标不是默认值,除非它包含.

OnlyLove_的博客 4047

3-写规则

规则出现在 Makefile 中,说明何时以及如何重制某些文件,这些文件被称为规则的目标文件。它列出了作为目标的先决条件,以及用于创建或更新目标的recipe。除了确定默认目标,规则的顺序并不重要。如果你没有另行指定目标,默认目标是第一个 Makefile 中第一条规则的第一个目标。有两个例外:①以"."开头的目标不是默认目标,除非它也包含一个或多个斜线"/";②定义模式规则的目标对默认目标没有影响。

优快云爱好者的独到见解 880
上一篇: linux_shell笔记(十)
下一篇: sed编辑器
terry_linux
博客等级 码龄17年 12粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值