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

问题描述 投票:2回答:1

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

makefile
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.