我想为变量“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)