Makefile GNU使模式在不同于src的目录中生成输出
我正在尝试创建一个Makefile,它将我的Makefile GNU使模式在不同于src的目录中生成输出,makefile,gnu-make,Makefile,Gnu Make,我正在尝试创建一个Makefile,它将我的.o文件放置在与源文件不同的目录中。我尝试使用模式规则,这样就不必为每个源和对象文件创建相同的规则 我的项目结构类似于: project/ + Makefile + src/ + main.cpp + video.cpp + Debug/ + src/ [contents built via Makefile:] + main.o + video.o OBJDIR_DEBUG = Debug O
.o
文件放置在与源文件不同的目录中。我尝试使用模式规则,这样就不必为每个源和对象文件创建相同的规则
我的项目结构类似于:
project/
+ Makefile
+ src/
+ main.cpp
+ video.cpp
+ Debug/
+ src/ [contents built via Makefile:]
+ main.o
+ video.o
OBJDIR_DEBUG = Debug
OBJ_DEBUG = $(OBJDIR_DEBUG)/src/main.o $(OBJDIR_DEBUG)/src/video.o
all: $(OBJ_DEBUG)
$(OBJ_DEBUG): %.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@
我的Makefile看起来像:
project/
+ Makefile
+ src/
+ main.cpp
+ video.cpp
+ Debug/
+ src/ [contents built via Makefile:]
+ main.o
+ video.o
OBJDIR_DEBUG = Debug
OBJ_DEBUG = $(OBJDIR_DEBUG)/src/main.o $(OBJDIR_DEBUG)/src/video.o
all: $(OBJ_DEBUG)
$(OBJ_DEBUG): %.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@
#坏掉了:
#Makefile:70:目标'src/main.o'与目标模式不匹配
#Makefile:70:目标'src/video.o'与目标模式不匹配
#在目标规则中添加OBJDIR_调试
OBJ=src/main.o src/video.o
$(OBJ):$(OBJDIR_DEBUG)/%.o:%.cpp
$(CXX)$(CFLAGS\u DEBUG)$(INC\u DEBUG)-c$<-o$@
在重新阅读之后,我导出了以下似乎有效的模式规则
$(OBJ_DEBUG): $(OBJDIR_DEBUG)/%.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@
$(OBJ_调试):$(OBJDIR_调试)/%.o:%.cpp
$(CXX)$(CFLAGS\u DEBUG)$(INC\u DEBUG)-c$<-o$@
我不确定这是否是最好的方法,我愿意接受建议。您可以尝试从另一个目录中的源代码构建对象,而不是在另一个目录中构建对象:将makefile放在对象将要存在的目录中,并告诉make使用VPATH在其他目录中查找源代码。如果所有对象文件都应该在同一个目录中结束,那么这种方法效果最好。通过在每个源上运行GCC,在单独的生成目录中“复制”源树的Makefile-如果在OBJDIR\u DEBUG中有子目录,会发生什么?我猜编译会失败,因为输出目录不存在。