天天看點

gcc/g++ 參數總結

GCC:The GNU Compiler Collection

它(GNU Compiler Collection)包含了多種語言的編譯器,如 C, C++, Objective-C, Objective-C++, Java, Fortran和Ada。但每種編譯器的名字不一樣,gcc 和 g++ 分别是 gnu 的 c & c++ 編譯器。

gcc/g++ 在執行編譯工作的時候,總共需要 4 步

  1. 預處理, 生成 .i 的檔案 [ 調用預處理器 cpp]
  2. 将預處理後的檔案轉換成彙編語言 , 生成檔案 .s[ 調用編譯器 gcc/egcs]
  3. 有彙編變為目标代碼 ( 機器代碼 ) 生成 .o 的檔案 [ 調用彙編器 as]
  4. 連接配接目标代碼 , 生成可執行程式 [ 調用連結器 ld]

1. gcc、g++、cc、CC

  • gcc 和 g++ 都是 GUN(組織)的編譯器。
    • gcc 是 C 編譯器;
    • g++是C++編譯器;
  • linux 下 cc 一般是一個符号連接配接,指向 gcc;
    • CC 則一般是 Makefile 裡面的一個名字,即宏定義,因為 Linux/Unix都是大小寫敏感的系統,這點一定要注意。

2. 參數詳解

  • -g

    :隻是編譯器,在編譯的時候,産生調試資訊。
    • -g為了調試用的,加個-g 是為了gdb 用,不然gdb用不到
    • -o output_filename,确定輸出檔案的名稱為 output_filename,同時這個名稱不能和源檔案同名。如果不給出這個選項,gcc就給出預設的可執行檔案a.out。
      • 一般文法: gcc filename.c -o filename
      • 如果不加 -o filename 那麼預設就是輸出 filemame.out。這個-o就是用來控制輸出檔案的。
    • -c 隻編譯(compile)不連結,産生.o檔案,就是obj檔案,不産生執行檔案
  • -O

    :Optimization,優化,O0/O1/O2/O3 ,

    編譯器的優化選項的4個級别,-O0表示沒有優化,-O1為預設值,-O3優化級别最高 

  • -Wall

    :Warning all,W 要大寫;

    生成所有警告資訊。

    • ‘-Wcomment’ This option warns about nested comments.
    • ‘-Wformat’ This option warns about the incorrect use of format strings in functions such as printf and scanf, where the format specifier does not agree with the type of the corresponding function argument.
    • ‘-Wunused’ This option warns about unused variables.
    • ‘-Wimplicit’ This option warns about any functions that are used without being declared.
    • ‘-Wreturn-type’ This option warns about functions that are defined without a return type but not declared void. It also catches empty return statements in functions that are not declared void.

3. ar cqs

GNU GCC 實用工具 ar 的參數的意義:

将一組編譯過的檔案合并為一個檔案。最常見的用法就是建立并更新由裝載器(loader–ld)使用的庫檔案。在參數中,隻有 key可以使用,但是每個key都可以加上附加的args(中間不帶空格)。posname是合并後檔案包的檔案名。當移動或是替代files的時候,你可以在posname之前或之後進行說明.

files 可以有檔案通配符,如 *.o。

key:

  • d 從檔案包中删除檔案
  • m 從檔案包中移動檔案到包尾
  • p 列印出檔案包中的檔案
  • q 在檔案包尾加入檔案.
  • r 在檔案包中代替檔案.
  • t 列出包中檔案名為files指明的檔案名的檔案内容.
  • x 從檔案包中解壓出檔案名為files指明的檔案.

args:

  • a 與r或m共同使用來将files指明的檔案放置于posname之後
  • b 與a作用相同,但是是在posname之前使用.
  • c 無提示模式建立檔案包
  • i 與b相同.
  • s 強制重新生成檔案包的符号表
  • T 隻在Solaris中有這個參數.在不支援長檔案名的檔案系統中減短長檔案名.沒有這個操作的話,長檔案的解壓結果是錯誤的.
  • u 與r共同使用,用來僅取代那些在生成檔案包之後改動過的檔案.
  • v 細節化,并列印一個檔案包的描述

表示:

(1) 生成 靜态庫的檔案名是 libmytest.a

(2) c 表示無提示模式建立檔案包

(3) q 表示在檔案包尾加入 myfun.o

(4) s 強制重新生成檔案包的符号表

繼續閱讀