2011-02-18 3 views
0

안녕하세요 각 .o가 다른 디렉토리의 상대 경로로 표시되고 로컬 디렉토리의 .cpp 파일에 대한 종속성이있는 makefile이 있습니다.줄기의 파일 이름에서 메이크 파일 타겟 종속성 생성

% .o 인 : 문제의 나의 이해는 내가 규칙 있도록 규칙 정의에 기능을 사용할 수 없다는 것입니다 %의 .CPP과 같은 디렉토리에있는 전제 조건 통화 당에서

결과 .o는 cpp가 실제로 위치하지 않는 곳입니다. 예를 들면 :

../../Tmp/MyClass.o : ../../Tmp/MyClass.cpp < --- %의 .o 인의 잘못, 결과 %의 .CPP

. ./../Tmp/MyClass.o : MyClass.cpp < --- 어떻게 자동으로이 작업을 수행 할 수 있습니까?

OBJS : 그들은 모두 처음부터 전체 상대 경로 정보가 있어야하므로

마지막으로 또 다른 디렉토리에있는 출력은, .o 만 년대에 종속 = $ (addprefix를 ../ .. /../Tmp/XCode/${PLATFORM}/${CONFIGURATION}/, $ (addsuffix .o, $ (basename $ {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

+0

죄송합니다 타격 입력 줄 바꿈 대신 덧글을 게시했습니다. $ {출력} : 그 때문에 작동하지 않습니다 그들은 모두 경로에서 포함해야합니다, 그래서 $ {OBJS} \t $ {AR} $ @ $는 {OBJS은} 출력은 .o 인 년대에 종속 처음. .o 경로는 다음을 통해 생성됩니다. OBJS : = $ (addprefix ../../../Tmp/XCode/${PLATFORM}/${CONFIGURATION}/, addsuffix .o, $ (basename $) {SRCS})))) – Corillian