如何在makefile中的变量内迭代每个文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在makefile中的变量内迭代每个文件相关的知识,希望对你有一定的参考价值。
我想为变量“CPPS”中的每个cpp文件创建* .o(在Ubuntu中)
CPPS := file1.cpp \
file2.cpp \
file3.cpp \
folder1/file4.cpp \
folder2/file5.cpp \
folder2/folder21/file6.cpp
OBJS := file1.o \
file2.o \
file3.o \
file4.o \
file5.o \
file6.o
test:$(OBJS)
$(CXX) $(FLAG) -o m $(OBJS)
我想自动为每个cpp创建* .o。我想在Makefile的同一个文件夹中创建* .o。如果所有的cpps都与Makefile在同一个文件夹中,我们可以使用
%.o:%.cpp
$(CXX) $(FLAG) -c -o $@ $< $(INC)
但问题是它们位于不同的文件夹中,目前我必须编写一个脚本来为每个文件创建一个lnk。有没有办法在变量中的每个文件上进行迭代?还是有另一种方法可以做到这一点?
答案
使用不同目录中的源文件是the vpath
directive的用途:
CPPS := file1.cpp ...
OBJS := file1.o ...
vpath %.cpp folder1 folder2 folder2/folder21
all: $(OBJS)
您可以从CPPS生成vpath和OBJS,而不是手动输入所有内容:
CPPS := file1.cpp ...
OBJS := $(notdir $(CPPS:.cpp=.o))
SRCDIRS := $(dir $(CPPS))
vpath %.cpp $(SRCDIRS)
all: $(OBJS)
以上是关于如何在makefile中的变量内迭代每个文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Makefile 中,如何使通配符函数适用于 VPATH 变量设置的所有路径中的文件