GCC是GNU推出的基於C/C++的編譯器,是開放源代碼領域應用最廣泛的編譯器,具有功能強大,編譯代碼支持性能優化等特點。
在Linux系統中,可執行文件沒有統一的後綴,系統從文件的屬性來區分可執行文件和不可執行文件。
而gcc則通過後綴來區別輸入文件的類別,下面介紹gcc所遵循的部分約定規則:
.c
爲後綴的文件,C語言源代碼文件.a
爲後綴的文件,是由目標文件構成的庫文件;.C
,.cc
或.cxx
爲後綴的文件,是C++源代碼文件;.h
爲後綴的文件,是程序所包含的頭文件;.i
爲後綴的文件,是已經預處理過的C源代碼文件;.m
爲後綴的文件,是Objective-C源代碼文件;.o
爲後綴的文件,是編譯後的目標文件;.s
爲後綴的文件,是彙編語言源代碼文件;.S
爲後綴的文件,是經過預編譯的彙編語言源代碼文件
一. 常用編譯命令選項
假設源程序文件名爲test.c。
-
無選項編譯鏈接
用法:gcc test.c
作用:將test.c
預處理、彙編、編譯並鏈接形成可執行文件。
這裏未指定輸出文件,默認輸出爲a.out
。 -
選項
-o
用法:gcc test.c -o test
作用:將test.c
預處理、彙編、編譯並鏈接形成可執行文件test。
-o
選項用來指定輸出文件的文件名。
-
選項
-E
用法:gcc -E test.c -o test.i
作用:將test.c
預處理輸出test.i
文件。 -
選項
-S
用法:gcc -S test.i
作用:將預處理輸出文件test.i
彙編成test.s
文件。 -
選項
-c
用法:gcc -c test.s
作用:將彙編輸出文件test.s
編譯輸出test.o
文件。 -
無選項鍊接
用法:gcc test.o -o test
作用:將編譯輸出文件test.o
鏈接成最終可執行文件test
。 -
選項
-O
用法:gcc -O1 test.c -o test
作用:使用編譯優化級別1編譯程序。級別爲1~3,級別越大優化效果越好,但編譯時間越長。
二. 多源文件的編譯方法
如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件爲test.c和testfun.c]
-
多個文件一起編譯
用法:gcc testfun.c test.c -o test
作用:將testfun.c
和test.c
分別編譯後鏈接成test可執行文件。 -
分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接
用法:
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
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。
運行程序 例如./a.out
就可以運行程序