makefile常用函数语法总结

### makefile常用函数语法总结在嵌入式平台或手机平台开发过程中,编写高效且易于维护的`Makefile`文件是十分重要的。`Makefile`不仅能够自动化编译过程,还可以通过灵活运用内置函数增强其功能性和可读性。本文将详细介绍`Makefile`中常用的字符串处理函数及其应用实例。 ####一、函数调用语法函数调用是`Makefile`中一个非常强大的特性,允许开发者在构建过程中进行动态变化与条件判断。函数调用的基本格式如下: - `$()`或`${}`其中,`函数名`指的是具体的函数名称,`参数`则是传递给函数的具体值或表达式。需要注意的是,参数之间的分隔符是逗号(`,`),而函数名与参数之间需要用空格分开。例如,下面的代码展示了如何调用`subst`函数实现字符串替换: ```make comma:=, empty:= space:=$(empty) foo:=abc bar:=$(subst $(space),$(comma),$(foo)) ```这里,`$(bar)`的值最终为`a,b,c`,即`subst`函数将`foo`变量中的空格替换成了逗号。 ####二、字符串处理函数详解**1. `subst`函数** - **名称**:字符串替换函数—— `subst` - **功能**:将字符串中的某部分替换成另一个字符串。 - **语法**:`$(subst ,,)` - **示例**: - `$(subst ee,EE,feetonthestreet)`,将`feetonthestreet`中的`ee`替换成`EE`,结果为`fEEtonthestrEEt`。 **2. `patsubst`函数** - **名称**:模式字符串替换函数—— `patsubst` - **功能**:根据模式替换字符串。 - **语法**:`$(patsubst ,,)` - **示例**: - `$(patsubst %.c,%.o,x.c cbar.c)`,将`x.c cbar.c`中符合`%.c`模式的单词替换成`%.o`,结果为`x.o bar.o`。 - **备注**: -这个函数可以用于实现类似于变量扩展的功能。 -例如,如果有`objects = foo.o bar.o baz.o`,那么`$(objects:.o=.c)`等价于`$(patsubst %.o,%.c,$(objects))`。 **3. `strip`函数** - **名称**:去空格函数—— `strip` - **功能**:移除字符串首尾的空白字符。 - **语法**:`$(strip )` - **示例**: - `$(strip abc )`,结果为`abc`。 **4. `findstring`函数** - **名称**:查找字符串函数—— `findstring` - **功能**:在字符串中查找指定子串。 - **语法**:`$(findstring ,)` - **示例**: - `$(findstring a,abc)`,结果为`a`;`$(findstring a,bc)`,结果为空字符串。 **5. `filter`函数** - **名称**:过滤函数—— `filter` - **功能**:保留目标字符串中符合指定模式的单词。 - **语法**:`$(filter ,)` - **示例**: - `sources := foo.c bar.c baz.s ugh.h` - `foo: $(sources)` - `cc $(filter %.c %.s,$(sources)) -o foo`,这里`$(filter %.c %.s,$(sources))`的结果为`foo.c bar.c baz.s`。 **6. `filter-out`函数** - **名称**:反过滤函数—— `filter-out` - **功能**:移除目标字符串中符合指定模式的单词。 - **语法**:`$(filter-out ,)` - **示例**: - `objects = main1.o foo.o main2.o bar.o` - `mains = main1.o main2.o` - `$(filter-out $(mains),$(objects))`的结果为`foo.o bar.o`。 **7. `sort`函数** - **名称**:排序函数—— `sort` - **功能**:对字符串中的单词进行排序。 - **语法**:`$(sort )` - **示例**: - `words = banana apple orange` - `sorted_words = $(sort $(words))` -此时`$(sorted_words)`的值为`apple banana orange`。 ####总结通过上述介绍,我们可以看到`Makefile`提供了丰富的内置函数来帮助开发者处理字符串和模式匹配等问题。这些函数的应用能够极大地提高`Makefile`文件的灵活性和效率,同时也使得编译过程更加清晰易懂。在实际开发过程中,合理利用这些函数可以帮助开发者更好地管理项目,并提升开发效率。
doc 文件大小:45.5KB