2011-02-18 65 views
0

您好我有一个生成文件,我创建了每个.o表示为另一个目录的相对路径,并且对本地目录中的.cpp文件具有依赖关系。我对这个问题的理解是,我不能在规则定义中使用的功能所以规则:从文件名生成一个生成文件目标依赖关系

%的.o:%的.cpp

导致的先决条件的.cpp那就是在同一个目录中.o这不是cpp实际所在的位置。例如:

../../Tmp/MyClass.o:../../Tmp/MyClass.cpp < ---%的.o的错误的,结果:%的.cpp

。 ./../Tmp/MyClass.o:MyClass.cpp < --- RIGHT,我如何以自动的方式做到这一点?

最后的输出,这是又一个目录,对的.o的依赖,使他们都必须从一开始就充满相对路径信息:

OBJS:= $(addprefix ../ .. /../Tmp/XCode/${PLATFORM}/${CONFIGURATION}/,$(addsuffix的.o,$(基名$ {SRCS})))

$ {OUTPUT}:$ {OBJS}; $ {AR} $ @ $ {OBJS}

谢谢!

回答

0

我认为克里斯蒂的解决方案将工作,但这里的另一种方式做同样的事情:

# Here's how you do it: 
OBJS := $(addprefix ../../../Tmp/XCode/${PLATFORM}/${CONFIGURATION}/, $(addsuffix .o, $(basename ${SRCS}))) 

# Here's a slightly cleaner way: 
BASEPATH = ../../../Tmp/XCode/$(PLATFORM)/$(CONFIGURATION) 
OBJS := $(patsubst %.cc,$(BASEPATH)/%.o,$(SRCS)) 

# And here's the rule: 
$(OBJS): $(BASEPATH)/%.o: %.cc 
    whatever... 
0

这应该工作

../../Tmp/%.o: %.cpp 

或者使用一个变量

builddir := ../../Tmp 
$(builddir)/%.o: %.cpp 
+0

嗨克里斯蒂感谢您的回应。不幸的是,这不起作用,因为: – Corillian 2011-02-18 20:51:31