addprefix函数

函数名称:加前缀函数—addprefix

函数功能:为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。

返回值:以单空格分割的添加了前缀“PREFIX”的文件名序列。

函数说明:

示例:

 

$(addprefix src/,foo bar)

 

返回值为“src/foo src/bar”

 

 

 

编写Makefile,可以为我们编译和链接程程带来大大的方便,今天在这里给大家聊下$(addprefix)的使用,先给大家看段Makefile的代码吧:

[plain] view plain copy

1.  INCLUDE_DIR=usr/java/jdk1.8.0_25/include \  

2.      usr/java/jdk1.8.0_25/include/linux  #两个路径

3.  INCLUDE_FLAG=$(addprefix -I,${INCLUDE_DIR})  

4.    

5.  all:  

6.      ls ${INCLUDE_FLAG}  

假如我们在命令行执行下面的命令:

[cpp] view plain copy

1.  make  


此时,我们将会看到这样的输出:

看到了吗?命令ls后面两个的路径的前面都被添加了-I,和你想像的一样,该addprefix就是用于添加前缀的,格为:

[plain] view plain copy

1.  $(addprefix fixstring,string1 string2 ...)  


其中,fixstring表示任意要添加的固定前缀,在逗号的后面可以是一个或多个要添加前缀的子字符串,多个子字符串之间用空格隔开,当然,你也可以像前面的例子一样用变量。

############################################################################### # 变量定义区域 # TARGET: 最终生成的可执行文件名 # CC: 使用的C语言编译器 # CFLAG: 编译器选项集合(-g 生成调试信息,-Wall 启用所有警告) # LFLAG: 链接器选项集合(-lm 链接数学库) # SRC: 使用通配符获取当前目录所有.c源文件 # OBJ: 将SRC中的.c后缀替换为.o,得到目标文件列表 #################################################################### TARGET = main CC = gcc BUILD_DIR = build #OBJ = main.o CFLAG += -g -Wall LFLAG += -lm -lgdi32 #搜索源文件,设定文件名 SRC = $(wildcard *.c) SRC += $(wildcard w_math/*.c) OBJ = $(SRC:.c=.o) # OBJ = $(patsubst %.c , %.o, $(SRC)) ############################################################################### # 主构建规则 # 参数说明: # $(OBJ): 依赖所有.o目标文件 # 特殊变量: # $^: 表示所有依赖文件列表 # $@: 表示目标文件名 # 命令说明: # 链接所有目标文件并附加数学库,生成最终可执行程序 #addprefix 函数:自动为每个 .o 文件名添加 build/ 路径前缀 #################################################################### $(TARGET) : $(OBJ) $(CC) $(addprefix $(BUILD_DIR)/,$^) $(LFLAG) -o $(BUILD_DIR)/$@ # $(CC) $(BUILD_DIR)/$^ $(LFLAG) -o $(BUILD_DIR)/$@ ############################################################################### # 模式规则 - 编译C源文件 # 参数说明: # %.o: 匹配所有.o目标文件 # %.c: 对应的同名C源文件 # 特殊变量: # $<: 表示第一个依赖文件名 # $@: 表示目标文件名 # 命令说明: # 带调试信息和警告的编译选项,-c参数执行编译不链接 #################################################################### %.o : %.c $(BUILD_DIR) $(CC) $(CFLAG) -c $< -o $(BUILD_DIR)/$@ $(BUILD_DIR): mkdir $(BUILD_DIR) ############################################################################### # 清理规则 # 功能说明: # 删除所有生成的中间文件(.o)和可执行文件 # 系统差异说明: # del: Windows系统删除命令 使用反斜杠\ # rm: Unix-like系统删除命令(当前被注释) # $(RM): 跨平台删除命令写法(当前被注释) #################################################################### .PHONY : clean clean : del *.exe del $(BUILD_DIR)\*.o del $(BUILD_DIR)\*.exe # rm -f *.exe # $(RM) -f *.exe 不能自动生成文件夹,请优化
03-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值