makefile将生成的obj放入特定文件夹

时间:2020-04-16 04:25:41

标签: gcc makefile gnu-make

我试图重组我的项目,以将所有生成的目标文件放在特定的“ 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全部'。停止
先感谢您!

0 个答案:

没有答案
相关问题