2015-12-12 51 views
1

我有src,obj和inc dirs项目文件夹。在_OBJS OBJSMakefile:如何更改var的前缀?

SDIR = src 
ODIR = obj 

# I change /src/*.c to /obj/*.o 
_OBJS = $(patsubst %.c, %.o, $(wildcard $(SDIR)/*.c)) 
# I need to change /src/*.o to /obj/*.o 
OBJS = $(??? $ODIR ??? $_OBJS ???) 

现在 - -

我宣布所有与obj VAR ./src/*.o,如何OBJS /src/改变到/obj/

谢谢。

回答

2

这个怎么样(如果我理解正确的问题):

SDIR = src 
ODIR = obj 

# I change /src/*.c to /obj/*.o 
_OBJS = $(patsubst %.c, %.o, $(wildcard $(SDIR)/*.c)) 
# I need to change /src/*.o to /obj/*.o 
_OBJS := $(subst $(SDIR), $(ODIR), $(_OBJS)) 

debug: 
    @echo $(_OBJS) 

输出/测试:

$ mkdir ./src/ 
$ touch ./src/a.c 
$ touch ./src/b.c 
$ touch ./src/c.c 
$ ls ./src/ 
a.c b.c c.c 
$ make debug 
obj/a.o obj/b.o obj/c.o 
+0

谢谢,它看起来很好。我会试试 – fandyushin

+0

我已经重用了'_OBJS'变量。如果您喜欢 – urban

+0

'OBJS = $(subst $(SDIR),$(ODIR),$(patsubst%.c,%.o,$(通配符$(SDIR)/ *),您可以分配一个新的c) ))'我结合了。 – fandyushin

0
_OBJS = $(patsubst %.c, %.o, $(wildcard $(SDIR)/*.c)) 
_OBJS := $(notdir $(_OBJS)) 
OBJS = $(patsubst %,$(ODIR)/%,$(_OBJS)) 

但是,我认为,它的坏的方式