2012-10-29 66 views
0

我知道這個錯誤與遺漏TAB,但我有點不能找出第1行是標籤丟失:Makefile.win:1:***缺少分隔符。停止

的Makefile:

## -*- 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

我無法重現你的錯誤更大。我建議儘量減少這個例子 - 刪除行和測試,直到找到出現此錯誤的最小,最簡單的makefile。告訴我們你正在使用哪個版本的make('make -v')可能也很有用。 – Beta

+0

這幾乎總是相同的問題:您的食譜(shell命令)*必須以TAB字符*開頭。您似乎正在使用空格。 – reinierpost

+1

@reinierpost,錯誤信息是否表明第1行有問題?或者,這是微軟那些迷人的古怪之一嗎? – Beta

回答

3

就我個人而言,我遇到了與Windows上的某個編輯器保存的Makefile相同的問題。原因然後是Makefile中的一個BOM (Byte Order Mark),這令Make混淆。

要檢查它是否可以(手動)將整個Makefile(或可能除標題註釋外)複製並粘貼到其他編輯器/ IDE中創建的新文件中。另請參閱a great answer關於如何刪除Windows上的BOM。

+0

Eldar和@Beta:請閱讀我對以下兩個答案的評論。感謝您的幫助。 –

1

如果你的「的Makefile。取勝」是完全相同的副本,然後將命令之前,選項卡代替了所有的空格:

所有:$(程序)
< 插件卡在這裏,沒有空格 > @test -x在/ usr/bin中/條& &條$^

運行:$(程序)在這裏
< 插入選項卡,沒有空格 > @for美元(節目);做回聲; echo「Running $$ p:」; ./$$p;做

清潔:
< 在此處插入標籤,沒有空格 > RM室顫$這裏(方案)
< 插入選項卡,沒有空格 > RM -vrf * .dSYM

runAll:
< 這裏插入標籤,沒有空格 > for $ in $(programs);做回聲「Running $$ p」; ./$$p;完成

+0

在「在此處發佈問題之前,我已」完成了「。但我不知道這個記事本如何對待這個標籤!當我將makefile複製到Linux並通過Kwrite打開時,我意識到我「再次」必須用新選項卡替換這些選項卡! –

1

行只是LDLIBS前明顯寫着:

config CXXFLAGS) 

這將產生一個makefile語法錯誤,但我希望它是一個行數大於1

+2

感謝你。這是Windows的「該死的」'Notepad'的錯!該死的東西顯示了第1行的錯誤。我將makefile複製到Linux並通過Kwrite打開它。然後編譯器在「正確的」行號上顯示錯誤。 –