一 錯誤記錄
(1) g++ 輸出 *.o: file not recognized: 不可識別的文件格式,而且對應的輸出文件超級大:
原因可能是你使用g++編譯了 [*.hpp] 文件。
二 用法記錄
(1) notdir :
用途: 去掉文件列表中每個文件的路徑
用法舉例: $(notdir $(wildcard .c ./xpp/.cpp ) )
(2)wildcard :
用途:搜索指定位置符合條件的文件,返回結果列表
用法舉例 : $(wildcard *.c ./xpp/*.cpp ),表示搜索當前目錄中後綴名爲 .c 以及子目錄 xpp 中後綴名爲 .cpp 的所有 文件。
(3) g++ 參數說明
以一條語句說明解釋之:g++ -std=c++11 -o Main $(OBJ) -lgsl -lgslcblas -L libs/ -static -I $(includes)
-std=c++11:編譯特性;
-o:告訴g++後面是要輸出的文件 (-c 則表示只進行編譯輸出 目標文件,不進行鏈接)
$(OBJ) : g++的輸入文件,應該是一系列的目標文件;
-lgsl :表明要使用庫 gsl.a 或 gsl.so ;
-L libs/ : 指定g++搜索庫的目錄,實際上就是gsl、gslcblas 所在的目錄,此處爲libs/;
-I : 指定g++頭文件搜索目錄。
(4) ldd MAIN:
查看可執行程序MAIN是否成功地鏈接到動態庫文件 。
三、Linux 編譯項目經驗
編寫源代碼時養成良好的習慣,可以節約不少力氣。用慣了Window 下的強大人性化的IDE,將代碼遷移到Linux下時會遇到一系列代碼編寫問題。
1 頭文件和源文件必須分開,這樣便於以後編譯或者編譯成庫發佈。
2 函數的實現最好不要寫在頭文件中,不要隨手寫在包含類聲明的頭文件中。