Makefile 特殊符号 - `-` `@` `+` `$` `$$`

Makefile 特殊符号 - - @ + $ $$

1. - 符号 (连字符)

任何命令行的任何非零退出状态都被忽略,忽略当前命令行执行时所遇到的错误。
make 在执行命令的时候,如果遇到 error,会退出执行。加上减号的目的是即便此命令行执行出错,那么也不要管,继续执行 make。
通常删除或者创建文件时,遇到文件不存在或者已经创建。如果希望忽略掉错误,继续执行,就可以在命令行前面添加 -

.PHONY : clean
clean :
	-rm $(objects)

2. @ 符号 (at 符号)

通常 makefile 会将其执行的命令行在执行前输出到屏幕上。如果将 @ 添加到命令行前,这个命令将不被 make 回显出来,即不显示命令本身而只显示结果。

# ============================================================================
# Name        : Makefile
# Author      : Yongqiang Cheng
# Version     : Feb 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Workspace in C, Ansi-style
# ============================================================================

ifdef DEFINE_VAR
	VAR = "!!!Hello World!!!"
endif

ifeq ($(OPT), define)
	VAR ?= "!FIRST!"
endif

ifeq ($(OPT), add)
	VAR += "!SECOND!"
endif

ifeq ($(OPT), recover)
	VAR := "!THIRD!"
endif

    x = cheng
    y = $(x) yong
    x = qiang

    m := face
    n := $(m) person
    m := pedestrian

all :
	@echo Compiling Kernel Module
	echo Compiling Kernel Module
	@echo $(VAR)
	@echo $(x)
	@echo $(y)
	@echo $(m)
	@echo $(n)

strong@foreverstrong:~/Desktop/makefile_work$ make DEFINE_VAR=true
Compiling Kernel Module
echo Compiling Kernel Module
Compiling Kernel Module
!!!Hello World!!!
qiang
qiang yong
pedestrian
face person
strong@foreverstrong:~/Desktop/makefile_work$

3. + 符号 (加号)

使用加号修饰符让命令始终执行。命令行执行时不受到 make 的 -n -t -q 三个参数的影响,忽略这三个参数。
如果 make 执行时,使用 -n--just-print。该参数显示命令,不会执行命令。这个功能有利于调试 Makefile,方便查看执行的命令形式和顺序。

# ============================================================================
# Name        : Makefile
# Author      : Yongqiang Cheng
# Version     : Feb 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Workspace in C, Ansi-style
# ============================================================================

ifdef DEFINE_VAR
	VAR = "!!!Hello World!!!"
endif

ifeq ($(OPT), define)
	VAR ?= "!FIRST!"
endif

ifeq ($(OPT), add)
	VAR += "!SECOND!"
endif

ifeq ($(OPT), recover)
	VAR := "!THIRD!"
endif

    x = cheng
    y = $(x) yong
    x = qiang

    m := face
    n := $(m) person
    m := pedestrian

all :
	@echo Compiling Kernel Module
	@echo $(VAR)
	echo Compiling Kernel Module
	@echo $(VAR)
	@+echo Compiling Kernel Module
	@echo $(VAR)
	@echo $(x)
	@echo $(y)
	@echo $(m)
	@echo $(n)

strong@foreverstrong:~/Desktop/makefile_work$ make
Compiling Kernel Module

echo Compiling Kernel Module
Compiling Kernel Module

Compiling Kernel Module

qiang
qiang yong
pedestrian
face person
strong@foreverstrong:~/Desktop/makefile_work$ 


strong@foreverstrong:~/Desktop/makefile_work$ make -n
echo Compiling Kernel Module
echo 
echo Compiling Kernel Module
echo 
echo Compiling Kernel Module
Compiling Kernel Module
echo 
echo qiang
echo qiang yong
echo pedestrian
echo face person
strong@foreverstrong:~/Desktop/makefile_work$

4. $ 符号 (美元符号)

美元符号 $,扩展打开 makefile 中定义的变量。

5. $$ 符号

$$ 符号,扩展打开 makefile 中定义的 shell 变量。

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Makefile中,存在一些特殊的符号和变量,用于表示特定的含义或执行特定的操作。以下是一些常见的Makefile符号解析: 1. `target: dependencies`: 目标和依赖关系之间使用冒号分隔。目标是要构建的文件或操作,而依赖关系是构建目标所需的文件或操作。 2. `command`: 在目标规则中,使用命令行来执行构建操作。命令必须以Tab键开头,并且每个命令都会在一个单独的Shell中执行。 3. `$@`:这是一个自动化变量,表示当前目标的名称。在规则中使用`$@`可以引用当前正在构建的目标。 4. `$<`:这是一个自动化变量,表示当前规则的第一个依赖项的名称。在规则中使用`$<`可以引用第一个依赖项。 5. `$^`:这是一个自动化变量,表示当前规则的所有依赖项的名称。在规则中使用`$^`可以引用所有的依赖项。 6. `.PHONY`:这是一个特殊目标,用于声明伪目标(即不对应实际文件)。伪目标通常用于定义一些不需要生成文件的操作,如`clean`等。 7. `.DEFAULT`:这是一个特殊目标,用于定义默认规则。当Makefile中没有指定目标时,会执行`.DEFAULT`目标中定义的规则。 8. `$(var)`:这是一个变量的引用。在Makefile中,我们可以定义和使用变量来存储值,以便在规则中引用。 这只是一些常见的Makefile符号解析,还有其他更多的符号和变量可以在Makefile中使用。你可以根据需要查阅GNU Make的文档来了解更多详细信息。 希望这些解释对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Cheng

梦想不是浮躁,而是沉淀和积累。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值