Makefile 不同赋值符号学习
在 Makefile 中,:=
,+=
,?=
以及=
是用来赋值的运算符。
= 这是最基本的赋值运算符。在等号两边的空格将被忽视。它将右边的字符串赋给左边的变量。如果右边的值中包含了变量,这些变量将被展开为需要的值。例如:
VAR = value
这将把字符串"value
"赋给变量VAR
。
:=:这也是一个赋值运算符,但它在赋值时会立即展开右边的变量。例如:
VAR := $(foo)
这将把foo的当前值(在:=运算符处)赋给VAR
。
+=:这个运算符用于将右边的字符串追加到左边的变量的值后面。如果变量之前没有定义,+=
就和=
一样。例如:
VAR = value VAR += another_value
这将把字符串"another_value
"追加到VAR
的值后面,所以最终VAR的值将是"value another_value
"。
?=:这个运算符只有在变量未定义时才进行赋值。如果变量已经定义,无论是空还是非空,那么?=
都不会赋值。例如:
VAR ?= value
这将把字符串"value
"赋给VAR
,但只有在VAR
未定义时才会这样。
以上就是对:=,+=,?=,=
这四个赋值运算符的简单介绍和示例。
Makefile中常见自动变量
命令格式 | 含 义
$*
: 不包含扩展名的目标文件名称;
$+
: 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件;
$<
: 第一个依赖文件的名称;
$?
: 所有时间戳比目标文件晚的依赖文件,并以空格分开 ;
$@
: 目标文件的完整名称;
$^
: 所有不重复的依赖文件,以空格分开;
$%
: 如果目标是归档成员,则该变量表示目标的归档成员名称。
Makefile CFLAGS 介绍及使用
CFLAGS是用于C编译器的选项的Makefile变量。CFLAGS变量通常包含应用于C编译器的标志,如优化级别,警告级别等。
例子1:
你可以设置CFLAGS来打开所有警告并启用所有优化:
CFLAGS=-Wall -O2
在这个例子中,-Wall选项告诉编译器生成所有警告,-O2选项告诉编译器使用第二级优化。当然,CFLAGS可以设置为你需要的任何值。
例子2:
在Makefile中你可以通过宏定义来控制源程序的编译。只要在Makefile中的CFLAGS
中通过选项-D
来指定你于定义的宏即可。
如:
CFLAGS += -D KK
或
CFLAGS += -D KK=XX
例子3:
在Makefile中使用CFLAGS的例子如下:
CC=gcc CFLAGS=-I. helloworld: main.o hello.o $(CC) -o helloworld main.o hello.o $(CFLAGS)
在这个例子中,CFLAGS被设置为-I
.,-I选项的作用是指定包含文件的搜索路径,.
表示在当前目录下搜索。
在命令$(CC) -o helloworld main.o hello.o $(CFLAGS)
中,使用了$(CFLAGS)
变量。这条命令的意思是,使用gcc编译器将main.o和hello.o链接成名为helloworld的可执行文件,链接时使用CFLAGS
中指定的选项。