본문 바로가기
IT/Android

첫번째 타겟 보다 앞에서 명령어가 시작되었습니다 멈춤

by 큰공 2020. 11. 10.
728x90
반응형

 

 

 

빌드 에러 발생

 Android.mk 파일 빌드 중에 아래와 같은 에러가 발생하였다. 원인을 파악해보고, 수정 해보자.

 "*** 첫번째 타겟보다 앞에서 명령어가 시작되었습니다.  멈춤."

device/Android.mk:219: *** 첫번째 타겟보다 앞에서 명령어가 시작되었습니다.  멈춤.

** Don't have a product spec for: 'build_eng'
** Do you have the right repo manifest?

 

원인

 원인 파악을 위해서 Androld.mk 219 라인을 살펴 보았다. 원래 218 라인 까지 있는 코드 였는데, 219 이하를 추가를 하면서 218 라인에 \ 를 추가하지 않고, 219 이하 라인에만 이를 추가하였다. 이 이후에 위와 같은 에러가 발생하였다.

 219 라인에서 발생한다고 나와있지만, 항상 디버깅 시에는 219 라인 이전 이후를 잘 살펴야 한다.

	217 $(LOCAL_DIR)/test.mk \
	218 $(LOCAL_DIR)/test1.mk        #여기서 문제가 발생하였다.
	219 $(LOCAL_DIR)/test2.mk \

 

Make 파일에서 \ 의 의미

 make 파일에서 긴 문장을 여러 라인에 표시하기 위해서 '\'를 사용한다. 긴 하나의 문장을 하나로 쭈우우욱 적으면 가독성이 떨어지기때문에 위와 같은 방법을 사용한다. 

 위의 에러는 '첫 번째 타겟이 나오기 전에 명령어가 시작되었다'는 애매한 에러 메시지이다. 필자가 경험한 이 에러의 원인은 '\'를 사용할 때, 이를 잘못 사용했기 때문이였다. 

 즉, '\'부분은 라인의 가장 끝문자가 되어야 하는데 실수로 '\'뒤에 스페이스를 몇 개 집어넣으면 여지없이 위의 에러가 발생한다.

 

수정

 219번째 줄(근처)에서 '\' 문자를 추가하자.

 또한, 혹시나 '\' 문자가 있다면 이 문자가 라인의 가장 끝문자가 되도록 한다. 즉 '\'문자 다음에 나오는 글자(스페이스가 대부분) 는 모조리 없애 버린다.

 

commands commence before first target. Stop

 영문 빌드 에러 메시지는 아래와 같다.

*** commands commence before first target. Stop

 

맺으며

 space check of line end. 라인 끝의 공백과 '\" 문자를 확인하자.

 

 

 

 

 

 

728x90
반응형

댓글