makefile : 4 : *** 구분 기호가 없습니다. 중지


473

이것은 내 makefile입니다.

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll

make clean또는을 시도 make make하면이 오류가 발생합니다.

:makefile:4: *** missing separator.  Stop.

어떻게 고칠 수 있습니까?


5
.RECIPEPREFIX를 사용하여 사용하는 문자를 변경할 수 있습니다. 참조 : gnu.org/software/make/manual/html_node/...
aseq

2
이것은 어떻게 복제본으로 닫히지 않았습니까 ??? Make 오류
jww

mcedit "Options-> General"에서 "Fake half tabs"에 대괄호 안에 "X"가 없는지 확인하십시오.
Jovan Ružić

답변:


991

makefile은 탭과 매우 어리석은 관계가 있으며 모든 규칙의 모든 동작은 탭으로 식별됩니다. 그리고 4 칸은 탭을 만들지 않고 탭만 탭을 만듭니다.

내가 명령을 사용하는지 확인하려면 cat -e -t -v makefile_name

또한 탭이 ^I있고 탭으로 끝나는 줄이 $있으면 종속성이 올바르게 끝나고 탭이 규칙에 대한 조치를 표시하여 make 유틸리티에서 쉽게 식별 할 수 있도록해야합니다.

예:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$ 
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   \rm -fr ll$
## see here there is no ^I which means , tab is not present .... 
## in this case you need to open the file again and edit/ensure a tab 
## starts the action part

8
"cat -e -t -v makefile_name"이 가장 좋습니다. 이제까지. 나는 화면을 계속 쳐다 보면서 탭처럼 보이는 것을 보았습니다. 전체 파일에서 하드 탭 대신 공백을 사용하는 것이 한 줄이라는 것이 완전히 누락되었습니다.
arinmorf

정말 고맙습니다! 큰 프로젝트의 소스 코드를 컴파일했습니다. makefile튜토리얼에서 일부 줄을 붙여 넣었 지만 작동하지 않았습니다. 공백을 삭제하고 Tab대신 넣은 후에 만 작동했습니다!
rzaaeeff

vi (또는 vim) 편집기를 사용하여 한 makefile에서 다른 makefile로 복사 / 붙여 넣기 할 때 파일의 끝을 나타내는 ~ (물결표) 줄을 실수로 잡지 마십시오. 실제 ~는 vi 마커처럼 보이고 "*** 구분 기호가 없습니다. 중지합니다." 오류. 이것은 분명해 보일 수 있지만 실수로 발생했을 때는 분명하지 않습니다. 자세한 내용은 내 블로그 주석 을 참조하십시오.
Scott

3
-v수단 과 수단 cat때문에 명령 옵션 이 중복됩니다 . -e-vE-t-vT
xxks-kkk

2
누군가가 탭을 대체하는 편집기를 사용하는 경우 여기에 탭 문자가 있습니다.
Ivan Borshchov

32

VS Code에서 오른쪽 아래 모서리에있는 "Space : 4"를 클릭하고 Makefile을 편집 할 때 탭으로 변경하십시오.


1
나는 그 사실조차 알지 못했습니다-그 정보에 감사드립니다. 나는 이전에 정규식 찾기-교체를 사용하고 있었지만 이것은 훨씬 더 좋습니다.
Peanut

VS Code는 접미사가없는 'Makefile'에서 추출 된 'common.mk'파일이 make 파일임을 인식하고 올바르게 강조 표시했지만 탭 대신 공백으로 들여 쓰기를 시작했습니다.
Francis Norton

도와 주셔서 감사합니다! 그 하단 모서리에 탭 설정이 있음을 분명히 알지 못했습니다.
se_brandon

28

항상 Tab공백이 아닌 뒤에 명령을 작성해야 합니다.

이것은 gcc귀하의 경우 라인 (라인 # 4)에 적용됩니다 . 전에 탭을 삽입해야합니다 gcc.

또한 교체 \rm -fr ll와 함께 rm -fr ll. 이 명령 앞에 탭을 삽입하십시오.


3
매우 명확하게하려면 각 논리적 레시피 행의 첫 번째 문자로 하드 TAB 문자가 있어야합니다. TAB 뒤에 원하는 공백을 추가 할 수 있습니다.
MadScientist 2016 년

탭 공간이 2 또는 4와 같아야합니까? /.vimrc에서 tabstop = 2 또는 4?
Rahul Reddy

@RahulReddy 편집기가 탭을 표시하는 방법은 구성에 탭 문자가 있는지 여부와 관련이 없습니다.
xaxxon

앞에 공백이 있었기 때문에 좋은 팁입니다. 내가 확인했을 때 효과가있었습니다.
최상급

9

해결책 PyCharmMakefile support플러그인 을 설치하는 것입니다 .

  1. 열기 Preferences( cmd + ,)
  2. Plugins->로 이동Marketplace
  3. Makefile supportIDE를 검색하고 설치 한 후 다시 시작하십시오.

문제를 해결하고 makefile에 대한 구문을 제공해야합니다.


이것은 또한 GoLand
Vizjerei

나는 IDE가 중요하다는 것을 안다. pycharm에서는 탭 에디션이 지원되지 않습니다. ATOM으로 변경하면 TAB 입력이 작동합니다.
달빛 기사

6

꽤 오래된 질문이지만 여전히 vi/vim편집기를 사용하여 탭을 시각화하는 옵션에 대해 하나 더 말하고 싶습니다 . vi/vim설치 한 경우 Makefile(예 :)를 열고을 vim Makefile입력하십시오 :set list. 아래와 같이 삽입 된 탭 수가 표시됩니다.

 %-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$

6

.editorconfig탭을 자동으로 수정하는 데 사용 :

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab

4

핵심은 "HARD TAB"입니다. 1. 공백 대신 TAB을 사용했는지 확인하십시오. 2. .vimrc에서 "set tabstop = X"를 확인하십시오.


2

누구든지 Intellij의 제품을 사용하는 경우 이에 대한 솔루션은 다음과 같습니다.

  1. 환경 설정> 편집기> 코드 스타일로 이동하십시오.
  2. 여기서 문제와 관련된 파일 형식을 선택해야합니다. 그러나 대부분을 선택해야합니다 Other File Types.
  3. 열린 탭에서 확인란을 표시 Use tab character및주의, Tab size그리고 Indent값은 4 있어야합니다.

2

makefile 편집에 mcedit를 사용하는 경우 다음과 같은 표시가 나타납니다. 여기에 이미지 설명을 입력하십시오


0

이것은 탭이 공백으로 대체되기 때문입니다. 이 기능을 비활성화하려면

gedit-> 편집-> 환경 설정-> 편집기

확인을 제거

" 공백으로 탭 바꾸기 "

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