我试图重组我的项目,以将所有生成的目标文件放在特定的“ obj”文件夹中,当我只处理在makefile下使用的c文件时,它工作正常(我将src1.c放在src1 dir,src2中。 src2目录中的c和src3目录中的src3.c)。
vpath %.c src
vpath %.c src2
vpath %.c src3
D_OBJ = obj
CC = gcc
SRC_C = src1.c src2.c src3.c
OBJ_C = $(addprefix $(D_OBJ)/,$(patsubst %.c,%.o,$(notdir $(SRC_C))))
DEP = $(addprefix $(D_OBJ)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))
.PHONY: all
all:$(OBJ_C)
$(D_OBJ)/%.o:%.c
$(CC) -c -Wall $< -o $@ -MMD -MF $(D_OBJ)\\$*.d -MP
-include $(DEP)
当前,我在src1,src2和src3中有asm和S文件,分别称为file1.asm file2.asm file3.asm和sfile1.s,sfile2.s和sfile3.s。 如何将所有生成的.o文件放入obj文件夹?
我在下面尝试过,但没有用
vpath %.c src
vpath %.c src2
vpath %.c src3
vpath %.s src
vpath %.s src2
vpath %.s src3
vpath %.asm src
vpath %.asm src2
vpath %.asm src3
D_OBJ = obj
CC = gcc
SRC_C = src1.c src2.c src3.c
SRC_ASM = file1.asm file2.asm file3.asm
SRC_S = sfile1.s sfile2.s sfile3.s
OBJ_C = $(addprefix $(D_OBJ)/,$(patsubst %.c,%.o,$(notdir $(SRC_C))))
OBJ_S = $(addprefix $(D_OBJ)/,$(patsubst %.s,%.o,$(notdir $(SRC_S))))
OBJ_ASM = $(addprefix $(D_OBJ)/,$(patsubst %.asm,%.o,$(notdir $(SRC_ASM))))
DEP = $(addprefix $(D_OBJ)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))
DEP += $(addprefix $(D_OBJ)/, $(patsubst %.s,%.d,$(notdir $(SRC_S))))
DEP += $(addprefix $(D_OBJ)/, $(patsubst %.asm,%.d,$(notdir $(SRC_ASM))))
.PHONY: all
all:$(OBJ_C) $(OBJ_ASM) $(OBJ_S)
$(D_OBJ)/%.o:%.c
$(CC) -c -Wall $< -o $@ -MMD -MF $(D_OBJ)\\$*.d -MP
$(D_OBJ)/%.o:%.asm
$(CC) -c -Wall $< -o $@ -MMD -MF $(D_OBJ)\\$*.d -MP
$(D_OBJ)/%.o:%.s
$(CC) -c -Wall $< -o $@ -MMD -MF $(D_OBJ)\\$*.d -MP
-include $(DEP)
得到错误:make:***没有规则使目标obj/file1.o', needed by
全部'。停止
先感谢您!