Make 사용 시 "대상 없음" 오류

Make 사용 시 "대상 없음" 오류

저는 makemakefile을 사용하는 방법을 배우고 있어서 다음과 같은 작은 파일을 작성했습니다.

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

하지만 달리면 " 무슨 일이 일어났나요?"라는 make말밖에 나오지 않습니다.make: *** No targets. Stop.

답변1

질문:

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

예를 들어 위의 Makefile을 실행하면 make stackoverflow.markdown작동합니다.

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

~처럼라이야즈가 나왔어요위의 패턴 규칙은 다음과 같습니다.암시적 규칙.

파일 생성:

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

.PHONY: all clean

all: $(TAR)

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

clean:
    rm -f $(TAR)

설명하다:

SRC.htmlMakefile을 통해 모든 소스 파일(다음으로 끝나는) 가져오기wildcard.

아스팔트대안나열된 각 소스 파일의 SRC대상은 .markdown..html

. 가짜항상 쓸모가 없어 항상 실행되는 비물리적 대상을 나열합니다. 일반적으로 all및 입니다 clean.

이것표적all:종속성이 있는 모든 파일 (오른쪽에 나열된 파일 *.markdown) 이는 이러한 목표가 모두 구현되었음을 의미합니다.

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

이 코드 조각은 다음과 같이 말합니다. 로 끝나는 모든 대상은 .markdown동일한 이름을 가진 파일에 종속되지만 종속성은 .html.This 로 끝납니다.와일드카드%*껍질 처럼 취급됩니다 . 그러나 오른쪽 경주는 %왼쪽 경주와 비교됩니다.원천.

노트앞의 공백 시퀀스는 표준으로 정의되었기 때문에 pandoca입니다 .TABmake

마지막으로 가짜 clean대상은 이 Makefile을 사용하여 생성된 파일 시스템을 정리하는 방법을 설명합니다. 이 경우 모든 대상(이름이 *.markdown.

답변2

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

Makefile에 정의된 대상이 없습니다. 명령줄에서 대상을 지정할 수 있습니다. make something.markdown레시피를 사용하여 something.markdown대상을 생성합니다 something.html.

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

all: file1.markdown file2.markdown

또는와일드카드 사용:

all: *.markdown

막 달리고 있을 때 make,첫 번째 규칙의 첫 번째 대상이 기본 대상입니다.. 호출할 필요는 없습니다 all.

그래서 위의 대상에는 all전제 조건으로 만들고 싶은 모든 파일이 있으므로 , make all나열된 모든 파일을 만듭니다.

관련 정보