- 以最基本的一個helloworld程序爲例,代碼如下(hello.c):
- (其實下面這段代碼沒什麼用處...)
- #include <stdio.h>
- void main()
- {
- int i = 0;
- while(i < 10)
- {
- printf("hello world !!\n");
- i++;
- }
- return ;
- }
- 最基本的gcc編譯方式爲:
- gcc -o test hello.c
- - o 的意思是 指定編譯生成的目標名稱,那麼上面編譯的結果就是產生一個叫做hello的目標文件,
- 可以通過./hello執行,執行結果是輸出10條hello world。如果沒有-o參數,默認生成的是 .a 類型的文件
- - c 的作用是:只是編譯而不做鏈接。生成的是.o類型的文件。在大型項目裏面,寫makefile的時候會經常用到
- 這個選項,先把大量的源文件編譯成.o類型的文件,在最後再鏈接到一起。- c 是無法指定生成的.o文件名稱的。
- - l 的作用是:包含指定的lib庫文件。比如,在程序中用到了pthread,那麼在編譯的時候必須加上 -lpthread
- 選項,比如上面的程序,gcc -o test -lpthread hello.c。當然,上面的程序沒有用到pthread,但是依然是
- 可以編譯通過的。
- 與- l 配套的是- L選項,-L選項是指定庫文件的路徑,如果是自己生成的lib文件,同時lib文件放在別的目錄底下
- 的話需要使用這個選項指定包含路徑。
- - Idir(需要跟單獨的 -I 選項區分) 的作用是:添加一個include文件夾,編譯時,會先去該文件夾查找需要的頭
- 文件,如果沒有,纔回去系統默認文件夾查找需要的頭文件。
- 如果要用到gdb調試器的話,那麼有一個選項是必須的,那就是 - g,- g的意思是產生調試信息,當然-ggdb的話,
- 可能會生成更多gdb可用的調試信息,但其實是-g的一個子參數,如果沒有定義-g選項,那麼是無法使用gdb進行調試
- 的。
- 還有一個編譯選項也是常用的,那就是 -w ,輸出警告信息。gcc在編譯時,有些情況下是不會打印警告信息的,如果想要
- 看到警告信息,那麼這個參數是必須的。比如gcc -o hello -w hello.c 。
- 其他的參數,對我來說還不常用,等用到了再補充。