makefile 中如何切分字符串
时间: 2023-10-14 16:06:10 浏览: 96
在 Makefile 中切分字符串可以使用内置函数 `$(subst from,to,text)` 或 `$(patsubst pattern,replacement,text)`。其中,`$(subst from,to,text)` 将字符串 `text` 中所有的 `from` 替换为 `to`,返回替换后的字符串;`$(patsubst pattern,replacement,text)` 则是根据模式 `pattern` 匹配 `text` 字符串中的子字符串,并用 `replacement` 替换匹配到的子字符串,返回替换后的字符串。
例如,假设有一个字符串 `var = a/b/c`,要将其切分成三个变量 `var1 = a`、`var2 = b`、`var3 = c`,可以使用 `$(subst /, ,$(var))` 将 `/` 替换为空格,然后使用 `$(word n,text)` 函数获取空格分隔后的第 `n` 个单词,即:
```makefile
var = a/b/c
var1 := $(word 1,$(subst /, ,$(var)))
var2 := $(word 2,$(subst /, ,$(var)))
var3 := $(word 3,$(subst /, ,$(var)))
$(info var1=$(var1))
$(info var2=$(var2))
$(info var3=$(var3))
```
输出:
```
var1=a
var2=b
var3=c
```
另外,如果字符串的切分需要更复杂的模式匹配,可以使用 `$(patsubst)` 函数。例如,假设有一个字符串 `src = src/main.c`,要将其切分成两个变量 `dir = src`、`file = main.c`,可以使用 `$(patsubst src/%,%,$(src))` 匹配 `src/` 开头的子字符串,然后使用 `$(dir)` 和 `$(notdir)` 函数获取目录和文件名,即:
```makefile
src = src/main.c
dir := $(dir $(src))
file := $(notdir $(patsubst src/%,%,$(src)))
$(info dir=$(dir))
$(info file=$(file))
```
输出:
```
dir=src/
file=main.c
```
阅读全文