- 嵌入式Linux开发实用教程(“十二五”国家重点图书出版规划项目)
- 朱兆祺 李强 袁晋蓉编著
- 445字
- 2020-06-26 22:41:27
1.2.3 Makfile常用关键字
1.ifneq关键字
这个关键字是用来判断两个参数是否不相等。格式为:
ifneq “Value1”“Value2” ifneq (Value1,Value2)
在判断之前先要将Value1和Value2的值进行展开和替换,如在U-Boot-2013.04的顶层目录Makefile中,对U-Boot的版本参数就使用了ifneq关键字进行判断。
VERSION = 2013 PATCHLEVEL = 04 SUBLEVEL = EXTRAVERSION = ifneq "$(SUBLEVEL)" "" U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) else U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION) endif
先将SUBLEVEL使用$()展开和替换,如果SUBLEVEL的值不是空,则执行:
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
也就是说,如果$(SUBLEVEL) = 1的话,那么U_BOOT_VERSION = 2013.04.1。
如果SUBLEVEL的值是空,则执行:
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
那么此时U_BOOT_VERSION = 2013.04。
2.ifeq关键字
ifeq关键字和ifneq关键字是相对而言的,用来判断两个参数是否相等。格式为:
ifeq “Value1”“Value2” ifeq (Value1,Value2)
和ifneq一样,先要将Value1和Value2展开替换之后,再进行比较。
ifeq ($(HOSTARCH),$(ARCH)) CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- endif
如果HOSTARCH展开替换之后和ARCH展开替换之后相等,则:
CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-
否则CROSS_COMPILE不等于/usr/local/arm/4.4.1/bin/arm-linux-。
3.ifndef关键字
ifndef关键字用来判断一个变量是否没有进行定义。格式:
ifndef Value
由于在Makefile中,没有定义的变量的值为空。
ifndef CONFIG_SANDBOX SUBDIRS += $(SUBDIR_EXAMPLES) endif
如果CONFIG_SANDBOX值为空,条件成立,执行如下语句:
SUBDIRS += $(SUBDIR_EXAMPLES)
否则不执行。
4.ifdef关键字
ifdef关键字用来判断一个变量是否已经进行定义过。格式:
ifdef Value
如:
ifdef CONFIG_SYS_LDSCRIPT # need to strip off double quotes LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT)) endif
如果CONFIG_SYS_LDSCRIPT定义过,则执行:
LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
否则不执行。