如何使用Makefile规则将.o文件放入单独的目录中

yeg*_*256 3 c++ makefile

我有以下Makefile规则:

DIR = src
SOURCES = $(shell find $(DIR) -name "*.cpp")
OBJS := $(SOURCES:.cpp=.o)
Run Code Online (Sandbox Code Playgroud)

使用此定义,我的所有.o文件都位于与其.cpp对应项相同的目录(和子目录)中.这样的分配原则很快就会使项目目录变得混乱(有50多个文件).我想为.o文件创建一个新的特定文件夹并将它们放在那里.我需要编写一个make-rule来转换每个.o文件名,如下所示:

foo/bar/test.o —> objects/foo-bar-test.o
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建这样的规则Makefile?提前致谢!

小智 5

我使用这样的规则:

$(ODIR)/%.o: $(SDIR)/%.cpp 
    $(CC) -c $(INC) -o $@ $< $(CFLAGS) 
Run Code Online (Sandbox Code Playgroud)

哪里

ODIR = object file output directory
SDIR = .cpp source file directory
INC = list of -I flags
CFLAGS = the usual
Run Code Online (Sandbox Code Playgroud)