开发者

Generating a makefile target dependency from the filename in a stem

Hi I have a makefile I am creating where each .o is represented as a relative path to another directory and has a dependency on a .cpp file in the local directory. My understanding of the problem is that I can't use functions in a rule definition so the 开发者_如何学运维rule:

%.o: %.cpp

results in a prerequisite .cpp that is in the same directory as the .o which is not where the cpp is actually located. For example:

../../Tmp/MyClass.o: ../../Tmp/MyClass.cpp <--- WRONG, result of %.o: %.cpp

../../Tmp/MyClass.o: MyClass.cpp <--- RIGHT, how do I do this in an automatic way?

Lastly the output, which is in yet another directory, has a dependency on the .o's so they must all have full relative path information from the beginning:

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

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

Thanks!


I think kristi's solution will work, but here's another way to do the same thing:

# 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...


This should work

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

Or use a variable

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜