답변:
당신의 문제는 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
.html
Makefile을 통해 모든 소스 파일 (로 끝나는 파일)을 가져옵니다 wildcard
.
TAR은 대체 에 나열된 각 소스 파일 SRC
대상이 끝나는와 .markdown
대신을 .html
.
.PHONY의 목록에서 오래된 항상 때문에 항상 실행되는 비 물리적 대상 - 다음은 자주 all
와 clean
.
대상all
종속성 (파일의 우측에 나열된 갖는 :
전체) *.markdown
파일. 이는 이러한 모든 대상이 실행됨을 의미합니다.
%.markdown: %.html
pandoc -o $< $@
이 스 니펫은 다음과 같이 말합니다.로 끝나는 각 대상 .markdown
은 종속성이로 끝나는 것을 제외하고 동일한 이름을 가진 파일에 의존합니다 .html
. 와일드 카드는%
A와 볼 수있다 *
껍질에있다. 은 %
오른쪽에, 그러나, 왼쪽의 일치에 비교됩니다. 소스 .
주 의 공백 시퀀스 뿅가 pandoc
있는 TAB, 이후 make
이 표준으로 정의합니다.
마지막으로, 가짜 clean
대상은이 Makefile로 작성한 파일에서 시스템을 정리하는 방법을 보여줍니다. 이 경우 모든 대상 (이름이 지정된 파일)을 삭제합니다 *.markdown
.
makefile
처음부터 파일을 만들 수 있습니까 아니면 기존 파일 만 업데이트합니까? 생성 된 파일을 삭제하면 작동이 중지되므로 바보 같은 질문이지만, 이것은 나에게 뉴 펀들 랜드입니다 ^^ "
Makefile에 정의 된 대상이 없습니다. 명령 행에서 대상을 지정할 수 있습니다 make something.markdown
만들 수있는 조리법 사용 something.markdown
에서을 something.html
.
또는 기본 대상을 지정하는 규칙을 Makefile에 추가 할 수 있습니다.
all: file1.markdown file2.markdown
또는 와일드 카드로 :
all: *.markdown
그냥 실행하면 make
, 첫 번째 규칙의 첫 번째 목표는 기본 목표입니다 . 호출 할 필요는 없습니다 all
.
위의 대상 all
에는 전제 조건으로 만들려는 모든 파일이 있으므로 사용자 make all
가 목록에있는 모든 파일을 만듭니다.
pandoc
명령 앞에 탭이 있습니다. 공백이 아닌 탭인 것에 대해서는 악명 높았습니다.