# gcc 參數 ## 基本編譯選項 `-o [filename]`: Place the output into [filename] `-c`: Compile and assemble, but do not link.如不加的話果 :::info * 沒有 main() 的 program 要加上 `-c` 才能 compile,否則會失敗,錯誤訊息如下。 ```bash (.text+0x1b): undefined reference to `main' collect2: error: ld returned 1 exit status ``` * 沒有 main() 的 program 編譯後最好命名為 XXX.o,再與主程式檔案做 link。 * 有 main() 的 program 加上 `-c` 編譯後,不能 execute 目標檔案,會有以下錯誤訊息。 ```bash bash: ./case1: 拒絕不符權限的操作 ``` ::: `-E`: Preprocess only; do not compile, assemble or link. ## 調試選項 `-g` : 在生成的可執行檔中包含除錯資訊,這使得在進行除錯時能夠獲取更多關於程式執行狀態的資訊,例如變數值、函式呼叫堆疊等。若要進行 DGB debug,則一定要加上 `-g`。 ## 優化選項 `-O0`, `-O1`, `-O2`, `-O3`:控制編譯器優化級別,數字越大,優化越多,但可能增加編譯時間。 `-Os`:優化程式碼大小。 `-Og`:針對調試進行輕量級優化。 ## 警告選項 `-Wall`: 顯示所有警告信息。。 `-Werror`: 將警告視為錯誤。 `-Wextra`: 顯示較多的警告信息。 ## 依賴性追踪選項 `-MMD`: 這個選項告訴 GCC 生成除了目標檔案外的依賴關係文件。依賴關係文件是一個文本文件,其中包含了源文件及其包含的頭文件之間的相依性。這在自動化編譯過程中特別有用,因為它可以確保當頭文件修改時,相關的源文件會重新編譯。 `-MF <filename>`:這個選項指定生成的依賴關係文件的文件名。可以使用該選項來自訂依賴關係文件的名稱和路徑。例如,-MF dependencies.d 將生成一個名為 dependencies.d 的依賴關係文件。 使用例子如下: ```bash gcc -o myfile.o -c -MMD -MF myfile.o.d myfile.c ``` 生成一個名為 `myfile.o.d` 的依賴關係文件,其中包含了 myfile.c 以及它所包含的頭文件的相依性信息,例如使用者定義的 `user header file`。 ## 預處理選項 `-D<macro>`: 定義編譯時的 `define`。 `-I<path>`: 指定頭文件搜索路徑。