之前自己照著網上的模板簡單編輯了vim的設定檔——位於家目錄下的.vimrc,如下:
1 "<br /> 2 set hlsearch "high light search on<br /> 3 set backspace=2 "delete any character in the file<br /> 4 set autoindent "auto indent on<br /> 5 set ruler "<br /> 6 set showmode "show which edit mode are you in<br /> 7 set nu "set number<br /> 8 set bg=dark "background color<br /> 9 syntax on "<br /> 10 set laststatus=2<br /> 11 set autoindent<br /> 12 set shiftwidth=4 "set the size of autoindent is 4<br /> 13 set softtabstop=4 "enter one tab, then 4 blank show<br /> 14 "set tabstop=4<br /> 15 set expandtab "vim uses the rational blanks to pad the tab<br />
結果在make的時候卻出現如下的提示:
makefile:4: *** missing separator. Stop.
我是一直覺得是我的設定檔有問題的,因為之前都沒有出現過這種情況!網上搜羅了良久,雖然找到了更正這個問題的方法,但是還是沒有找到通過更改.vimrc設定檔的方法來避免這個錯誤,這裡作個
標記
。如下對問題的解決過程作個簡單的記錄。
問題的原因在這裡
有詳細的解釋,這裡
也有。大致是因為make在讀取Makefile的過程中不能解析其中包含的內容。 GNU make在讀取Makefile時根據各種分隔字元(:, =, [TAB]字元等)來識別Makefile的每一行內容。如上錯誤意味著make不能發現一個合法的分隔字元。出現這些錯誤資訊的可能原因(或許是編輯器,絕大部分是ms-windows的編輯器)在Makefile中的命令之前使用了4個(或者8個)空格代替了[tab]字元。因為makefile中所有的命令列都應該是以[tab]字元開始的。
我在寫Makefile檔案的時候明明是已經用上了[tab]的,為了驗證下便用od命令查看我的Makefile檔案如下:
lianbequat@ubuntu:/home/advances/pthread/condition_var$ od -t c makefile<br />0000000 c c = g c c /n /n c o n d 1 : c o<br />0000020 n d 1 . c /n $ ( c c )<br />0000040 $ ^ - o $ @ /n<br />0000051<br />
發現我鍵入的[tab]定位字元已經被編輯器自動替換成了4個空格!在這裡
找到瞭解決這個問題的答案,即通過在
vim編輯模式下組合“ ctrl + v + i ”來寫入一個 tab鍵。重新make下,運行正確。再次以ASCII碼的格式查看我的Makefile檔案發現原先的4個空格已被 “ /t ”取代,如下:
lianbequat@ubuntu:/home/advances/pthread/condition_var$ od -t c makefile<br />0000000 c c = g c c /n /n c o n d 1 : c o<br />0000020 n d 1 . c /n /t $ ( c c ) $ ^<br />0000040 - p t h r e a d - o $ @ /n<br />0000057<br />
註:問題雖然解決,但是並不徹底。我不可能以後每次寫Makefile的時候都用那按鍵組合 “ ctrl + v + i ”來鍵入每個[tab]鍵吧?! 所以,還得繼續尋找問題。如今學得還不夠,就先這麼“半截子”記錄下。
2011.1.10 修正
找到原因了,只需要將在.vimrc中的最後一行的配置命令注釋掉即可! 一看便知。