2014-09-05 2 views
1

Windows 명령 창과 gnu 컴파일러를 사용하여 프로젝트를 컴파일하려고했습니다. 이 whethere 공백이나 콜론의에 의한 있다는 내가 여기에 몇 가지 이전 게시물을 통해 이해 한Makefile GNU 컴파일러 사용 중 오류 : 다중 타겟 패턴

#----------------------------------------------------------------------* 
#### Compilation rules. ASM files. 
#----------------------------------------------------------------------* 
$(OBJ_DIR)/%.s.o: $(A_DIR)/%.s $(OIL_OUTPUTS) 
    @if [ ! -d $(OBJ_DIR) ]; 
    then mkdir -p $(OBJ_DIR); 
    fi; 
    $(AS) $(ASFLAGS) $< -o [email protected] 

$(OBJ_DIR)/%.S.i: $(A_DIR)/%.S $(OIL_OUTPUTS) 
    @if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi; 
    $(CPP) $(CPPFLAGS) $< -o [email protected] 

$(OBJ_DIR)/%.S.o: $(OBJ_DIR)/%.S.i $(OIL_OUTPUTS) 
    @if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi; 
    $(AS) $(ASFLAGS) $< -o [email protected] 

: 메이크 파일의 45 라인 (29)을 여기에

../../../../make/compiler_rules.mk:40: *** multiple target patterns. Stop. 

있다 :이 오류가있어 파일이나 디렉토리의 이름. 나는 검사했고 그 사람은 아무도 아니다. 뭐가 될수 있었는지?

+0

해당 줄 위의 5-10 줄을 게시하십시오 (컨텍스트의 경우). 그 makefile이 직접 작성되었거나 자동 생성 되었습니까? –

+0

질문을 편집하고 makefile의 줄을 더 게시했습니다. 메이크 파일은 손으로 쓴 것이지만 나로는 작성하지 않습니다. –

+0

나는 거기에 아무 것도 보이지 않는다. (붙여 넣을 때 처음'@ if' 줄을 잘못 나눈 것처럼 보이지 않는다.) 이상하게 생긴 원래 makefile에서와 같이 분할 된 경우. –

답변

2

이것은 완전한 대답은 아니지만 잘하면 그것이 무슨 일인지 알아내는 데 도움이됩니다. 나는 다음 a.txt이와 a.txt이 목표 즉, 개별적으로 처리된다 둘 다 내장 얻을, 리눅스에서이 파일에 대한 make을 실행하면

all: a.txt a.TXT 
%.TXT: 
    echo HELLO > [email protected] 
%.txt: 
    echo hello > [email protected] 

: 나는 다음과 같은 Makefile을 만들었습니다.

그러나 이것을 고대 Windows XP VM에 복사하고 gnuwin32 make distribution과 함께 실행하면 a.txt와 a.TXT를 같은 것으로 처리합니다. 구체적으로 하나만 빌드하면됩니다. 이것은 정확히 $(OBJ_DIR)/%.s.o$(OBJ_DIR)/%.S.o에서 볼 수있는 것과 똑같은 동작은 아니지만, 리눅스 동작과 상당히 다릅니다. 따라서 이것은 case treatment으로 인한 것이며,이 특정 배포판 이 어떻게 처리하는지 알 것입니다. 이것은 당신이 사용하고있는 배포판과 동일한 것입니까? (버전 3.81)

그래서 지금은 수정을 제안 할 수는 없지만, 메이크 파일 (및 .mk 파일 지원)을 함께 공유해야한다고 생각합니다. 어떤 표적이 만들어 져야 하는지를 요구한다.

+0

어쨌든 당신을 Thnk. 사실,이 메이크 파일이 전체 OS를 컴파일하기 때문에 모든 대상과 makefile을 공유 할 수는 없습니다. 이전에 공유했던 링크 [http://trampoline.rts-software.org/spip.php?article18]를 사용하면 저장소에 액세스 할 수 있습니다. 반면에 make의 3.81 버전을 사용하고 있습니다. –

+0

다른 응용 프로그램과 다른 트 "켓트 용 시스템을 만들려고했으나 헛되이 노력했습니다. 그것은 MinGW를 사용하는 나 때문일 수 있습니까? –