一、findstring函数怎么用
findstring <string>,<text>
findstring
函数在makefile
中用于查找一个字符串是否包含在另一个字符串中。它返回值为字符串string
在text
中第一次出现的位置,如果string
没有出现在text
中,则返回空串。
下面举个例子,展示如何使用findstring
函数:
# 假设当前操作系统为macOS
ifeq ($(findstring macOS,$(shell uname)),macOS)
$(info current OS is macOS)
endif
上面的代码段中,如果当前操作系统是macOS,则打印一条信息表明当前操作系统为macOS。首先使用shell
函数获取当前操作系统的名称,然后使用findstring
函数将字符串"macOS"与获取到的操作系统名称进行查找判断。
二、findstring $(PRODUCT)
findstring
函数还可以与$
符号搭配使用,如findstring $(PRODUCT)
。在makefile
中,$
符号表示调用变量的值,即变量展开。
下面看一个使用findstring $(PRODUCT)
的例子:
PRODUCT := onyx
# 判断PRODUCT是否为onyx
ifeq ($(findstring onyx,$(PRODUCT)),onyx)
$(info product is onyx)
endif
上面的代码段中,定义了一个变量PRODUCT
,然后使用findstring
函数判断$(PRODUCT)
是否为字符串"onyx",如果是,则打印一条信息表明PRODUCT
的值为"onyx"。
三、findstring函数
可以将findstring
函数单独使用,如:
$(findstring ab, abc) # 返回非空字符串"ab"
$(findstring bc, abc) # 返回空字符串""
注意:这里$(findstring ab, abc)
的返回值为非空字符串"ab",而不是"1",因为findstring
函数返回的是字符串而不是数值。
四、findstring makefile
makefile
文件中的findstring
函数可以用于判断当前操作系统的类型、目标文件的后缀名、项目名称等其他用途。下面举几个例子:
- 判断当前操作系统的类型:
ifeq ($(findstring Linux,$(shell uname)),Linux)
# Linux下使用的一些指令
endif
ifeq ($(findstring Darwin,$(shell uname)),Darwin)
# macOS下使用的一些指令
endif
ifeq ($(findstring CYGWIN,$(shell uname)),CYGWIN)
# Windows下使用的一些指令
endif
- 判断目标文件的后缀名:
# 给所有的目标文件加上".o"后缀名
OBJ_FILES := $(addsuffix .o,$(BASE_FILES))
# 仅将".c"文件编译成".o"文件
OBJ_FILES := $(patsubst %.c,%.o,$(BASE_FILES))
# 如果是".cpp"文件,则将其编译成".o"文件
OBJ_FILES := $(filter %.o,$(patsubst %.cpp,%.o,$(BASE_FILES)))
# 如果是"$(PROJ_NAME).c"文件,则将其编译成"$(PROJ_NAME).o"文件
OBJ_FILES := $(filter-out $(PROJ_NAME).o,$(patsubst %.c,%.o,$(BASE_FILES))) $(PROJ_NAME).o
# 给所有的目标文件加上后缀名
OBJ_FILES := $(foreach file,$(BASE_FILES),$(file).o)
- 判断项目名称:
include common.mk
# 项目名为"myproj"
ifeq ($(findstring myproj,$(PROJ_NAME)),myproj)
# 进行相关操作
endif
五、findstring shell
findstring
函数还可以与shell
函数结合使用,进行更为灵活的处理。在makefile
中,shell
函数用于执行系统命令,并返回执行结果。下面举个例子:
# 获取当前时间,并将其传递给findstring函数进行处理
ifeq ($(findstring afternoon,$(shell date "+%P")),afternoon)
$(info Good Afternoon)
else
$(info Good Morning)
endif
上面的代码段中,使用shell
函数调用系统命令date "+%P"
获取当前时间是上午还是下午,并将其作为参数传递给findstring
函数进行处理,最终输出相应的问候语。
六、总结
本文从findstring
函数的不同用法进行了详细的阐述。findstring
函数在makefile
文件中有着广泛的应用场景,掌握好这个函数,能够让我们更加熟练地操作makefile
文件。