오류 만들기 : 구분 기호 누락


답변:


364

온라인 매뉴얼에 표시된대로 해당 오류의 가장 일반적인 원인은 make탭 문자를 예상 할 때 공백으로 줄이 들여 쓰기되기 때문 입니다.

옳은

target: 
\tcmd

\t탭은 어디에 있습니까 (U + 0009)

잘못된

target:
....cmd

여기서 각각 .은 SPACE (U + 0020)를 나타냅니다.


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

16

미소를 위해, 다른 누군가가 비슷한 오류가 발생하는 경우 :

함수를 정의하는 규칙을 호출했기 때문에 악명 높은 "missing separator"오류가 발생했습니다.

($eval $(call function,args))

오히려

$(eval $(call function,args))

($오히려 $(.


뭐? :) 당신이 0x20거기에 "공간"을 가지고 있지 않은 것 같아요 , 맞습니까?
user35443

3
@ user35443 배치 위치$
smac89

8

이것은 Makefile의 구문 오류입니다. 파일 자체 또는 관련 부분을 보지 않고는 그보다 더 구체적이기는 매우 어렵습니다.


5

나에게 문제는 여러 줄 변수 정의에 줄 끝 # ...주석이 포함되어 있다는 것 define ... endef입니다. 주석을 제거하면 문제가 해결되었습니다.


감사합니다. define지시어의 주석 이 문자 그대로 취급 되는지 몰랐습니다 . 실제로 동작은 설명서에 설명되어 있지 않습니다 . (명확하게하기 위해 : 지시문 내에 숫자 부호를 삽입하는 것은 구문 오류가 아닙니다. 그러나 주석의 시작으로 해석되지 않으므로 오류가 발생하기 쉽습니다.)#
ynn

3

내 오류는 여러 줄 확장명이있는 변수 선언 줄에있었습니다. "\"뒤에 후행 공백이있어서 유효하지 않은 줄 연속이되었습니다.

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2

1

내 경우에는 다음에 오류가 발생했습니다. 전 세계적으로, 즉 대상 외부에서 명령을 실행하려고했습니다.

UPD. 명령을 전체적으로 실행하려면 올바르게 구성해야합니다. 예를 들어 명령

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

될 것입니다 :

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))

1

필자의 경우 :에서처럼 콜론 이 누락되어 동일한 오류가 발생 했습니다 staging.deploy:. 따라서 구문 오류가 쉽게 발생할 수 있습니다.


1

필자의 경우 실제로 다음 줄의 명령과 명령 사이에 탭 이 없습니다ifeq . 시작할 공간이 없었습니다.

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

되어야했다 :

ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

(가) 주 <tab>실제 탭 문자입니다


0

필자의 경우이 오류는 단순한 공간 부족으로 인해 발생했습니다. 내 makefile에 블록이 있으면 이것을 가지고 있습니다.

if($(METHOD),opt)
CFLAGS=
endif

그것은 있어야했다 :

if ($(METHOD),opt)
CFLAGS=
endif

if 뒤에 공백이 있습니다.



-1

그래서 분명히, 필요한 모든 나는 "빌드 - 필수"패키지, 다음 실행했다 autoconf을 만든 첫 번째, Makefile.pre.in다음, ./configure다음 make완벽하게 작동하는 ...


-2

다음 Makefile 코드가 작동했습니다.

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.