-c
選項指示 GCC 只編譯不連結,否則 GCC 會使用臨時檔案作為目標檔案輸出:
$ gcc -c main.c
$ gcc -c func.c
$ gcc -c main.c func.c
然而,實際上編譯器通常每次只會被呼叫來完成一件小型任務。大的程式包含許多原始檔,在開發期間必須被編譯、測試、編輯,然後再編譯,很少會有在建立中的修改行為會影響所有的原始檔。為了節省時間,可以使用 make 控制建立過程,由它呼叫編譯器重新編譯,而且只編譯比對應的最新原始檔舊的那些目標檔案。$ gcc main.o func.o -o app.out -lm
GCC 假設擴充套件名為.o
的檔案是要被連結的目標檔案。
擴充套件名(字尾) | 說明 |
---|---|
.c | C程式原始碼,在編譯之前要先進行預處理。 |
.i | C程式預處理輸出,可以被編譯。 |
.h | C程式標頭檔案。(為了節省時間,許多原始檔會包含相同的標頭檔案,GCC 允許事先編譯好標頭檔案,稱為“預編譯標頭檔案”,它合適情況下自動被用於編譯。) |
.s | 組合語言。 |
.S | 有C命令的組合語言,在組合之前必須先進行預處理。 |
-x file_type
選項來指示 GCC 應該如何對待這些檔案。file_type 必須是下面其中之一:c、c-header、cpp-output、assembler(表示該檔案包含組合語言)、assembler-with-cpp 或 none。-x
後面所列的所有檔案都會被視為所指定的型別。如果想改變型別,可以再次使用-x
。如下例所示:
$ gcc -o bigprg mainpart.c -x assembler trickypart.asm -x c otherpart.c
可以在同一個命令列中多次使用-x
選項,以指示不同型別的檔案。-x none
選項會全部取消這些指示,後續檔案會按照 GCC 預設規則解釋它們的擴充套件名。
$ gcc main.c func.o -o app.out -lm
借助於這個命令,假設指定的檔案都存在,GCC 會編譯和組合 main.c,組合 func.o,並且連結庫檔案 libm.a。