Make를 사용한“No target”오류


12

나는 make파일을 만들고 사용하는 법을 배우고 있으므로이 작은 파일을 썼습니다.

%.markdown: %.html
    pandoc -o $< $@

그러나 내가 달리면 make내가 make: *** No targets. Stop.무슨 일이 일어나고 있습니까?


해당 공간 또는 pandoc명령 앞에 탭이 있습니다. 공백이 아닌 탭인 것에 대해서는 악명 높았습니다.
slm

@ slm : 탭입니다. Windows의 EOL이 호환되지 않는 곳을 읽었으므로 전체 파일로 Unix 호환 EOL로 변환했습니다.
ahmed

답변:


17

문제:

당신의 문제는 make당신의 목표에 대해 모른다는 것입니다.

make stackoverflow.markdown예를 들어 위의 Makefile을 실행할 수 있으며 작동합니다.

make 그러나 대상을 작성하는 방법 만 지정하고 어떤 대상을 작성하지 않았기 때문에 실패합니다.

leiaz가 지적한 것처럼 위의 패턴 규칙을 암시 적 규칙 이라고합니다 .

메이크 파일 :

SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)

.PHONY: all clean

all: $(TAR)

%.markdown: %.html
    pandoc -o $< $@

clean:
    rm -f $(TAR)

설명:

SRC.htmlMakefile을 통해 모든 소스 파일 (로 끝나는 파일)을 가져옵니다 wildcard.

TAR은 대체 에 나열된 각 소스 파일 SRC대상이 끝나는와 .markdown대신을 .html.

.PHONY의 목록에서 오래된 항상 때문에 항상 실행되는 비 물리적 대상 - 다음은 자주 allclean.

대상all 종속성 (파일의 우측에 나열된 갖는 :전체) *.markdown파일. 이는 이러한 모든 대상이 실행됨을 의미합니다.

%.markdown: %.html
    pandoc -o $< $@

이 스 니펫은 다음과 같이 말합니다.로 끝나는 각 대상 .markdown은 종속성이로 끝나는 것을 제외하고 동일한 이름을 가진 파일에 의존합니다 .html. 와일드 카드는% A와 볼 수있다 *껍질에있다. 은 %오른쪽에, 그러나, 왼쪽의 일치에 비교됩니다. 소스 .

의 공백 시퀀스 뿅가 pandoc있는 TAB, 이후 make이 표준으로 정의합니다.

마지막으로, 가짜 clean대상은이 Makefile로 작성한 파일에서 시스템을 정리하는 방법을 보여줍니다. 이 경우 모든 대상 (이름이 지정된 파일)을 삭제합니다 *.markdown.


1
훌륭한 답변과 이것들은 와일드 카드 함수 , 대체 참조 , 그리고 가짜 대상 을 더 이해하려고 할 때 찾은 다른 링크 입니다.
ahmed

하나 더 질문하십시오 : makefile처음부터 파일을 만들 수 있습니까 아니면 기존 파일 만 업데이트합니까? 생성 된 파일을 삭제하면 작동이 중지되므로 바보 같은 질문이지만, 이것은 나에게 뉴 펀들 랜드입니다 ^^ "
ahmed

1
.markdown 파일이 없으면 만들어 질 것입니까? 그래, 내가 아는 한 그렇게해야 돼
polym

1
좋아, 그럼. 좀 더 파도록하겠습니다. 답변 주셔서 감사합니다, 당신 덕분에 지금 옳은 길을 가고 있습니다
:)

1
큰 답변에 감사드립니다. 당신이 설명 한 방법은 명령의 배경이 아닌 이유와 진행 방법에 대한 매우 자세한 지침을 이해하는 것이 매우 쉽습니다. 다시 감사합니다.
zanona

5

패턴 규칙은 암시 적 규칙입니다.

Makefile에 정의 된 대상이 없습니다. 명령 행에서 대상을 지정할 수 있습니다 make something.markdown만들 수있는 조리법 사용 something.markdown에서을 something.html.

또는 기본 대상을 지정하는 규칙을 Makefile에 추가 할 수 있습니다.

all: file1.markdown file2.markdown

또는 와일드 카드로 :

all: *.markdown

그냥 실행하면 make, 첫 번째 규칙의 첫 번째 목표는 기본 목표입니다 . 호출 할 필요는 없습니다 all.

위의 대상 all에는 전제 조건으로 만들려는 모든 파일이 있으므로 사용자 make all가 목록에있는 모든 파일을 만듭니다.

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