gcc 編譯多個原始檔

2022-02-27 04:55:30 字數 1856 閱讀 1149

一. 常用編譯命令選項

假設源程式檔名為test.c

3. 選項 -e

用法:#gcc -e test.c -o test.i

作用:將test.c預處理輸出test.i檔案。

4. 選項 -s

用法:#gcc -s test.i

作用:將預處理輸出檔案test.i彙編成test.s檔案。

5. 選項 -c

用法:#gcc -c test.s

作用:將彙編輸出檔案test.s編譯輸出test.o檔案。

7. 選項-o

用法:#gcc -o1 test.c -o test

作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

二. 多原始檔的編譯方法

如果有多個原始檔,基本上有兩種編譯方法:

[假設有兩個原始檔為test.c和testfun.c]

2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案鏈結。

用法:#gcc -c testfun.c //將testfun.c編譯成testfun.o

#gcc -c test.c //將test.c編譯成test.o

#gcc -o testfun.o test.o -o test //將testfun.o和test.o鏈結成test

以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。

3. 如果要編譯的檔案都在同乙個目錄下,可以用萬用字元gcc *.c -o 來進行編譯。

你是否會問,如果是乙個專案的話,可能會有上百個檔案,這樣的編譯法,人不是要累死在電腦前嗎,或者等到你編譯成功了,豈不是頭髮都白了,呵呵,所以我們要把上述的編譯過程寫進以下乙個文字檔案中:

linux下稱之為makefile

#這裡可以寫一些檔案的說明

myfirst: myfirst.o hello.o

g++ myfirst.o hello.o -o myfirst

hello.o:hello.cpp

g++ -c hello.cpp -o hello.o

myfirst.o:myfirst.cpp

g++ -c myfirst.cpp -o myfirst.o

makefile 編寫規則:

(1)以「#」開始的行為注釋

(2)檔案依賴關係為:

target:components

rule

存檔為myfirst,在終端輸入:make myfist ,程式出現了錯誤可是所有程式設計師共同的敵人,在編寫程式時我們應該盡量的去避免錯誤的出現,不過編寫的時候再怎麼都不可避免的出現這樣那樣的錯誤,對程式進行必要的除錯是乙個好主意,那我們怎麼來除錯程式呢,看下面:

gdb ./檔名 ////////////////在這裡我修改下要想下面可以除錯,在上面編譯的 時候必須加上引數g,g++ -g hello.cpp -o hello

以下為除錯狀態下的可以用到的命令(可以僅輸入單詞的輸入,如break可簡為b),尖括號中為說明

list 《顯示源**》

break 行號 《設定斷點》

run 《執行程式》

continue 《繼續從斷點處執行》

print 變數 《除錯時檢視變數的值》

del 行號 《刪除斷點》

step 《單步執行,可跟蹤到函式內部》

next 《單步執行,不可跟蹤到函式內部》

quit 《退出》

makefile 的編寫不是件容易的事情,因為自己寫的makefile可能不能在所有的unix/linux類作業系統下通用。因此在很多專案中都用automake.autoconf或者是cmake等工具。

gcc 編譯多個原始檔

一.常用編譯命令選項 假設源程式檔名為test.c。3.選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。4.選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。5.選項 c 用法 gcc c ...

gcc 編譯多個原始檔

一.常用編譯命令選項 假設源程式檔名為test.c。1.無選項編譯鏈結 用法 gcc test.c 作用 將test.c預處理 彙編 編譯並鏈結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。2.選項 o 用法 gcc test.c o test 作用 將test.c預處理 彙編 編譯並鏈...

gcc編譯C原始檔

gcc編譯c程式的主要過程是 預處理 編譯 彙編 連線,其中 以名為hello.c的原始檔為例 預處理 對各種預處理指令 開頭,如 include,define 進行處理,以及刪除注釋和多餘空白字元。生成被修改的源程式hello.i e是通知gcc對hello.c進行預編譯 o是對命令輸出結果進行匯...