2012-10-29 3 views
0

나는이 오류가 TAB 누락에 관한 알고 중지하지만, 1 행에 누락 탭 어디에 어떻게 든 찾을 수 없습니다 :Makefile.win : 1 : *** 구분 기호가 누락되었습니다.

메이크 :

## -*- mode: make; tab-width: 8; -*- 
## 
## Simple Makefile 
## 
## TODO: 
## proper configure for non-Debian file locations, [ Done ] 
## allow RHOME to be set for non-default R etc 

## comment this out if you need a different version of R, 
## and set set R_HOME accordingly as an environment variable 

R_HOME =  $(shell R RHOME) 

sources =  $(wildcard *.cpp) 
programs =  $(sources:.cpp=) 


## include headers and libraries for R 
RCPPFLAGS =   $(shell $(R_HOME)/bin/R CMD config --cppflags) 
RLDFLAGS =  $(shell $(R_HOME)/bin/R CMD config --ldflags) 
RBLAS =   $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS) 
RLAPACK =  $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS) 

## if you need to set an rpath to R itself, also uncomment 
#RRPATH :=  -Wl,-rpath,$(R_HOME)/lib 

## include headers and libraries for Rcpp interface classes 
RCPPINCL =  $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave) 
RCPPLIBS =  $(shell echo 'Rcpp:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave) 


## include headers and libraries for RInside embedding classes 
RINSIDEINCL =  $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave) 
RINSIDELIBS =  $(shell echo 'RInside:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave) 

## compiler etc settings used in default make rules 
CXX =   $(shell $(R_HOME)/bin/R CMD config CXX) 
CPPFLAGS =  -Wall $(shell $(R_HOME)/bin/R CMD config CPPFLAGS) 
CXXFLAGS =  $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R CMD 

config CXXFLAGS) 
LDLIBS =  $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS) 

all: $(programs) 
    @test -x /usr/bin/strip && strip $^ 

run: $(programs) 
    @for p in $(programs); do echo; echo "Running $$p:"; ./$$p; done 

clean: 
    rm -vf $(programs) 
    rm -vrf *.dSYM 

runAll: 
    for p in $(programs); do echo "Running $$p"; ./$$p; done 

enter image description here

+0

나는 당신의 오류를 재현 할 수있는 것보다 더 큰 행 번호와 함께 기대

config CXXFLAGS) 

. 나는이 오류를 줄 수있는 가장 작고 단순한 makefile을 찾을 때까지 예제를 최소화하려고 시도한다. 줄을 제거하고 테스트한다. 사용중인 Make의 버전을 알려주는 것이 유용 할 수도 있습니다 ('make -v'). – Beta

+0

이것은 거의 항상 같은 문제입니다. 요리법 (셸 명령) *은 TAB 문자 *로 시작해야합니다. 대신 공백을 사용하는 것 같습니다. – reinierpost

+1

@reinierpost, 오류 메시지가 1 번 줄에 문제가 있음을 나타내지 않습니까? 아니면이 마이크로 소프트의 매력적 기발함입니까? – Beta

답변

3

개인적으로 저는 Windows의 일부 편집기에서 저장 한 Makefile과 동일한 문제에 직면했습니다. 원인은 Makefile에 BOM (Byte Order Mark)이었고, 이것은 make를 혼란스럽게 만들었습니다.

(수동으로) 다른 편집기/IDE에서 생성 된 새 파일에 전체 Makefile (또는 헤더 주석 제외)을 복사하여 붙여 넣을 수 있는지 확인하십시오. Windows에서 BOM을 제거하는 방법은 a great answer입니다.

+0

Eldar 및 @Beta : 아래의 두 답변에 대한 의견을 읽어주십시오. 도움을 주셔서 감사합니다. –

1

당신의 "메이크하는 경우가. 승리는 "정확히 일치하는 복사, 다음 탭 명령 전에 모든 공백을 대체 :

모든 : $ (프로그램)
를3210 < 삽입 탭 여기, 공백 > @Test -x는/usr/빈/스트립 & & 스트립 $^

실행 : $ (프로그램) 여기
< 삽입 탭, 공백은 > @for $ (프로그램)에서 p; 에코해라. echo "Running $$ p :"; ./$$p;

깨끗한 수행 : 여기
< 삽입 탭, 공백 > RM -vf $ 여기 (프로그램)
< 삽입 탭, 공백 > RM -vrf * .dSYM

runAll :
< 여기에 공백을 넣지 마십시오. 공백없이 > for $ (프로그램); echo "Running $$ p"; ./$$p; done

+0

"전에" "여기에"질문을 게시했습니다. 하지만이 메모장이 탭을 어떻게 다루는 지 모르겠습니다! makefile을 Linux에 복사하고 Kwrite를 통해 열면 "다시"해당 탭을 새 탭으로 바꾸어야한다는 것을 깨달았습니다. –

1

라인 바로 LDLIBS 전에 분명히 읽 메이크 구문 오류를 생성하는 것입니다,하지만 난 그게 1.

+2

감사합니다. 그것은 "빌어 먹을"Windows의 메모장의 잘못입니다! 그 빌어 먹을 것은 1 행에 오류를 보여주었습니다. 나는 makefile을 Linux에 복사하고 Kwrite를 통해 열었습니다. 그런 다음 컴파일러는 "적절한"행 번호에 오류를 표시합니다. –

관련 문제