Makefile 如何在项目文件夹上移动.o?
我编写这个Makefile是为了将项目的所有.o移动到主文件夹中的“obj”目录中 名录 生成文件 如何使其工作?这一行Makefile 如何在项目文件夹上移动.o?,makefile,Makefile,我编写这个Makefile是为了将项目的所有.o移动到主文件夹中的“obj”目录中 名录 生成文件 如何使其工作?这一行$OBJS_DIR)/%.o:$(SRCS)设置与$OBJS_DIR)/%匹配的每个文件的先决条件。o到$(SRCS)中的所有文件,这些文件甚至都不符合您的要求。(这也是一个打字错误。您缺少开头的() 您不能为您在此处尝试执行的操作编写一条规则。您需要三条模式规则(或者一条带有vpath/vpath设置) $(notdir)仅从源文件中获取文件名 $(patsubst)而不是
$OBJS_DIR)/%.o:$(SRCS)
设置与$OBJS_DIR)/%匹配的每个文件的先决条件。o
到$(SRCS)
中的所有文件,这些文件甚至都不符合您的要求。(这也是一个打字错误。您缺少开头的(
)
您不能为您在此处尝试执行的操作编写一条规则。您需要三条模式规则(或者一条带有vpath
/vpath
设置)
仅从源文件中获取文件名$(notdir)
而不是$(patsubst)
只是为了正确(subst会将$(subst)
文件修改为Bar.cpp.cpp
)Bar.o.o
将$(addprefix)
前缀添加到裸对象文件名$(OBJS_DIR)
$(OBJS)
仍然引用源目录,而不是$(OBJS_DIR)
:OBJS=$(subst.cpp,.o,$(SRCS))
。您需要在它们前面加上$(OBJS DIR)
。您在OBJS的末尾忘了一个'),谢谢您的回答!在浏览器窗口中编写代码的危险。谢谢
.:
actor/ lib/ Controller.cpp Controller.h Controller.o doc.txt main.cpp main.o Makefile uno VRP*
./actor:
Customer.cpp Customer.h Customer.o Depot.cpp Depot.h Depot.o Route.cpp Route.h Route.o Vehicle.cpp Vehicle.h Vehicle.o
./lib:
Search.cpp Search.h Search.o Utils.cpp Utils.h Utils.o VRP.cpp VRP.h VRP.o
CXX=g++
RM=rm -rf
BIN_NAME=VRP
CPPFLAGS=-s -O2 -std=gnu++11 -Wall
SRCS=$(wildcard *.cpp actor/*.cpp lib/*.cpp)
OBJS=$(subst .cpp,.o,$(SRCS))
all: $(OBJS_DIR) $(BIN_NAME)
$(OBJS_DIR):
mkdir $(OBJS_DIR)
$OBJS_DIR)/%.o : $(SRCS)
$(CXX) $(CPPFLAGS) -c $< -o $@
$(BIN_NAME) : $(OBJS)
$(CXX) -o $@ $^
debug:
$(CXX) -g $(CPPFLAGS) -o $(BIN_NAME) $(OBJS)
.PHONY : all clean
clean:
$(RM) $(OBJS) $(OBJS_DIR)
dist-clean: clean
$(RM) $(BIN_NAME)
$(OBJS_DIR)/%.o: %.cpp
$(CXX) $(CPPFLAGS) -c $< -o $@
$(OBJS_DIR)/%.o: actor/%.cpp
$(CXX) $(CPPFLAGS) -c $< -o $@
$(OBJS_DIR)/%.o: lib/%.cpp
$(CXX) $(CPPFLAGS) -c $< -o $@
OBJS=$(addprefix $(OBJS_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRCS))))