"다중 대상 패턴"Makefile 오류


82

내 makefile이 오류와 함께 실패합니다.

Makefile:34: *** multiple target patterns.  Stop.

이것은 정말로 무엇을 의미합니까? 어떻게 해결할 수 있습니까?

( Captain Obvious가 작성한 GNU make 매뉴얼 은 도움이되지 않습니다.)


그것을 발견. 나는 형태로 규칙을 가지고 있었다 :

$(FOO): bar

FOO콜론을 포함하는 오류 메시지로 오염시킨 쉘 명령에서 설정된 위치 .




이 답변은 "여러 대상 패턴이 있습니다"의 의역 일뿐입니다. 글쎄요. 어떻게 확인할 수 있습니까? 무엇이 그것을 유발할 수 있습니까? 이 문제를 방지하려면 어떤 예방 조치가 필요합니까?
Kornel

2
모든 것이 1 분 동안 작동했고 내 대본이 (세미) 콜론을 재채기했습니다 ... 헤헤. 내가 당신과 @mcr의 대답을 찾기 전에 적어도 3 시간 동안 문제를 찾으려고 노력했습니다. 땀 한 통 구해 줬어요 !!
GuruM

이 문제의 진정한 근본 원인은 GNU Make가 수십 년 전에 죽었어야했던 끔찍한 배설물 조각이라는 것입니다.
antred

답변:


62

Makefile에 있었어요

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial:  ${MAPS}
    ./updateser ${MAPS}

그것은 :파일 이름 때문입니다 . 나는 이것을

                      -------- 공지
                     / /
                    vv
MAPS + = reverse / db.901 \ : 550 \ : 2001.ip6.arpa
lastserial : $ {MAPS}
    ./updateser $ {MAPS}

1
나는 같은 문제가 있지만 당신의 대답을 이해하지 못합니다. 더 자세히
Pir Fahim Shah

4
@PirFahimShah 대답은 파일 이름 (db.901 : 550 : 2001.ip6.arpa)의 콜론을 이스케이프해야한다는 것입니다. mcr은 콜론 앞에 백 슬래시를 넣어 콜론을 이스케이프합니다. 이렇게하면 make는 콜론을 특수 기호로 해석하지 않습니다.
Loduwijk

1
고마워요. C:/Qt/5.8/mingw53_32/bin/rcc.exeMakefile 규칙 중 하나에서 콜론 ( ) 이있는 오래된 Windows 경로가 있습니다. 리눅스 시스템에서 구축하는 경우 그 자동 생성 메이크 제거
바딤 Kotov

Windows는 wsl (ubuntu)로 전환 하고이 오류가 발생 make clean하여 make해결되었습니다. 오류 라인은_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
Tyeth dec

22

원래 답변에서와 같이 콜론을 이스케이프 처리하는 것 외에도 들여 쓰기가 해제되어 있으면 잠재적으로 동일한 문제가 발생할 수 있음을 발견했습니다. 한 메이크 파일에서 공백을 탭으로 바꿔야했고 그 결과 오류를 극복 할 수있었습니다.


이 경우 GNU make는 "No Rule for Target"을보고 할 수도 있습니다.
davenpcj

4

Cygwin make 및 자동 생성 파일을 사용하고 있기 때문에이 오류가 발생하면 다음 sed로 수정할 수 있습니다.

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

첫 번째 대체에서 이스케이프 목록에 공백 이상의 문자를 추가해야 할 수도 있지만 아이디어를 얻습니다. 여기서 개념은 / cygdrive / c가 c의 별칭이라는 것입니다 : cygwin의 make가 인식 할 것입니다.

그리고 던질 수 있습니다.

-e 's@^ \+@\t@'

우연히 공백으로 시작한 경우를 대비하여 (나는 / 생각합니다 / 이것은 일반적으로 "구분자 누락"오류입니다).


3

나는 같은 오류를 만났다. 고생 한 끝에 폴더 이름의 "공백"때문이라는 것을 알았습니다.

예 :

이전에 내 폴더 이름은 "Qt Projects" 였습니다.

나중에 "QtProjects"로 변경했습니다.

내 문제가 해결되었습니다.

매우 간단하지만 때로는 중요한 문제입니다.


0

-nGREP_OPTIONS환경 변수 에 있었기 때문에이 문제 (대상 이름의 콜론)가있었습니다 . 분명히 이로 인해 잘못 configure생성되었습니다 Makefile.


0

내 IDE는 내 Makefile에 공백과 탭의 혼합을 남겼습니다.

내 Makefile을 탭만 사용하도록 설정하면이 오류가 해결되었습니다.


0

이 오류도 발생했습니다 (Windows의 Eclipse 기반 STM32CubeIDE 내에서).

"다중 대상 패턴"오류를 두 번 클릭하면 .ld파일 경로가 표시 됩니다. 또 다른 "불법 인물"문제로 밝혀졌습니다. 잘못된 문자가 (그것을 위해 대기)이었다 =

금주의 휴리스틱 : 경로에 [a..z] 만 사용하십시오. 다른 불법 문자가있을 수 있습니다 </ vomit>.

GNU 메이크업 매뉴얼은 명시 적으로 문서화하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.