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 变量。

你可能感兴趣的:(Makefile,-,makefile)