Makefile을 실행 가능하게 만드는 방법은 무엇입니까?

Makefile을 실행 가능하게 만드는 방법은 무엇입니까?

make우분투 파일 관리자에서 두 번 클릭하면 자동으로 실행 하려는 Makefile이 있습니다 . 그래서 이 Makefile을 실행 가능하게 만들고 그 맨 위에 다음 shebang 줄을 추가했습니다.

#!/usr/bin/make -f

실행하면 /usr/bin/make -f Makefile원하는 결과를 얻을 수 있습니다.

그러나 Makefile을 두 번 클릭하거나 실행하면 ./Makefile오류가 발생합니다.

: No such file or directory
clang-9      -o .o
clang: error: no input files
make: *** [<builtin>: .o] Error 1

Makefile을 실행 가능하게 만드는 올바른 방법은 무엇입니까?

다음은 내 makefile의 전체 내용입니다.

#!/usr/bin/make -f

# A makefile for building pdf files from the text (odt files) and slides (odp files).
# Author: Erel Segal-Halevi
# Since: 2019-02

SOURCES_ODP=$(shell find . -name '*.odp')
TARGETS_ODP=$(subst .odp,.pdf,$(SOURCES_ODP))
SOURCES_ODT=$(shell find . -name '*.odt')
TARGETS_ODT=$(subst .odt,.pdf,$(SOURCES_ODT))
SOURCES_DOC=$(shell find . -name '*.doc*')
TARGETS_DOC=$(subst .doc,.pdf,$(subst .docx,.pdf,$(SOURCES_DOC)))
SOURCES_ODS=$(shell find . -name '*.ods')
TARGETS_XSLX=$(subst .ods,.xlsx,$(SOURCES_ODS))

all: $(TARGETS_ODP) $(TARGETS_ODT) $(TARGETS_DOC) $(TARGETS_XSLX)
    #
    -git commit -am "update pdf files"
    -git push
    echo Done!
    sleep 86400

%.pdf: %.odt
    #
    libreoffice --headless --convert-to pdf $< --outdir $(@D)
    -git add $@
    -git add $<
    
%.pdf: %.doc*
    #
    libreoffice --headless --convert-to pdf $< --outdir $(@D)
    -git add $@
    -git add $<

%.pdf: %.odp
    #
    libreoffice --headless --convert-to pdf $< --outdir $(@D)
    -git add $@
    -git add $<

%.xlsx: %.ods
    #
    libreoffice --headless --convert-to xlsx $< --outdir $(@D)
    -git add $@
    -git add $<

clean:
    rm -f *.pdf

답변1

#!/usr/bin/make -fMakefile 실행을 허용하는 유효한 shebang입니다. Makefile의 문제는 shebang이 아니라 이 문제를 해결하는 경우 Windows 줄 종결자를 사용한다는 것입니다.예를 들어그리고

sed -i $'s/\r$//' Makefile

Makefile이 올바르게 실행됩니다.

make이와 같이 Makefile을 실행하는 것과 직접 실행하는 것의 차이점은 후자의 경우 Windows 줄 끝으로 인해 다음과 같이 make호출된다는 것입니다.

make -f $'\r'Makefile

단일 캐리지 리턴으로 구성된 이름을 가진 파일이 없기 때문에 "해당 파일 또는 디렉터리 없음" 오류가 발생합니다. Make가 파일을 Makefile로 처리하라는 요청을 받으면 파일을 생성하거나 필요한 경우 업데이트를 시도합니다. 여기서 Make가 찾고 있는 파일이 없기 때문에 이를 생성하려고 시도합니다. 이것은 전화할 것이다Make의 기본 규칙, C 컴파일러 호출이 시작되는 곳입니다.

관련 정보