Makefile foreach函数
在Makefile中如果想做一些循环或遍历操作时,可以使用foreach函数:
$(foreach VAR,LIST,TEXT)
foreach函数的工作过程是:把LIST中使用空格分割的单词依次取出并赋值给变量VAR,然后执行TEXT表达式。重复这个过程,直到遍历完LIST中的最后一个单词。函数的返回值是TEXT多次计算的结果。
使用示例:假设一个项目,MP3播放器,分别有lcd、keyboad、usb、media目录,分别存放不同的源文件:
# tree
.
├── keyboard
│ └── key.c
├── lcd
│ └── lcd.c
├── makefile
├── media
│ └── decode.c
└── usb
└── usb.c
现在编写一个Makefile,自动搜索各个目录下的C源文件。Makefile的写法如下:
.PHONY: all
dirs = lcd usb media keyboard
srcs = $(foreach dir, $(dirs), $(wildcard $(dir)/*))
all:
@echo "srcs = $(srcs)"
执行make命令,运行结果如下:
# make
srcs = lcd/lcd.c usb/usb.c media/decode.c keyboard/key.c
当然,我们也可以根据搜索到的这些C源文件名,生成对应的目标文件名,对应的Makefile如下:
.PHONY: all
dirs = lcd usb media keyboard
srcs = $(foreach dir, $(dirs), $(wildcard $(dir)/*.c))
objs = $(foreach src, $(srcs), $(subst .c,.o,$(src)))
all:
@echo "srcs = $(srcs)"
@echo "objs = $(objs)"
执行make命令,运行结果如下:
# make
srcs = lcd/lcd.c usb/usb.c media/decode.c keyboard/key.c
objs = lcd/lcd.o usb/usb.o media/decode.o keyboard/key.o
《Makefile工程实践》视频教程,一线开发工程师独家录制,网上首家讲解Makefile的实战课程。从零开始,教你一步一步编写一个工程项目的Makefile,支持使用第三方静态库、动态库,支持指定模块或目录编译生成静态库、动态库,赠送企业级的Makefile模板,学完即可拿来使用,投入项目开发实战,具备独立开展项目开发和管理的能力。详情请点击淘宝链接:Linux三剑客