如何在makefile中的变量内迭代每个文件

时间:2018-03-04 16:16:21

标签: 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。有没有办法在变量中的每个文件上进行迭代?还是有另一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

使用不同目录中的源文件是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)