gcc 經常使用命令行及解釋

gcc - GNU project C and C++ compiler
 
gcc [option] file...

           preprocessing         compilation               assembly       linking
.c(with macros)--->.c(without macros)--->assembler input file--->object file--->executable file
 
-E, -S, -c 告訴在編譯哪一個階段中止。
              -E 在執行 preprocessing 後中止,產生標準輸出。
              -S 在執行 compilation 後中止,產生 .s 文件。
              -c 在執行 assembly 後中止,產生 .o 文件。
 
-std 指定編譯器使用的標準。經常使用標準:c90, c89(就是c90), c99, gnu90(default), gnu99, c++98, gnu++98。示例:-std=c90。
              -ansi for C code 等價 -std=c90。-ansi for C++ code 等價 -std=c++98。
 
-pedantic Issue all the warnings demanded by strict ISO C and ISO C++;
               reject all programs that use forbidden extensions, and some other programs that do not follow ISO C and ISO C++.
               需配合 -std 或 -ansi 使用。
 
-g 添加標準調試信息。另外一個選項 -ggdb,添加對 gdb 更友好的調試信息。
 
-pg 當想使用性能分析工具 gprof 時,須要添加該選項。
 
-O 優化(Optimize)。經常使用可選值:-O0(default), -O1(等價 -O), -O2(通常使用的優化級別), -O3, -Os(針對空間優化)。
 
-Wall 開啓全部提醒。-Werror 把提醒看成錯誤。
 
-I 添加 include 目錄。
-L 添加 lib 目錄。
-l 將庫文件添加到連接過程當中,默認是連接 shared libraries。下面是爲何把 -l 放到命令行最後的緣由。
           It makes a difference where in the command you write this option;
           the linker searches and processes libraries and object files in the
           order they are specified.  Thus, foo.o -lz bar.o searches library z
           after file foo.o but before bar.o.  If bar.o refers to functions in
           z, those functions may not be loaded.
-static 強制使用 static linking 來連接庫(gcc 默認使用 shared linking, 不成功再試用 static linking)。連接庫時有兩種選擇:static linking(*.a, archive file), dynamic linking(*.so, shared object)。
 
-shared
           Produce a shared object which can then be linked with other objects
           to form an executable.
 
-Dmacro[=defn] 定義 macro。
-U 取消 macro 的定義。該 macro 能夠是 either built in or provided with a -D option。
試驗  https://gist.github.com/4277550, -D #define, -U #undef
 
-o 定義 output 文件名。
 
-f Options of the form -fflag specify machine-independent flags.應該不經常使用吧。
      -fPIC emit position-independent code, suitable for dynamic linking and avoiding any limit on the
           size of the global offset table. 
-m   Each target machine types can have its own special options, starting
       with -m, to choose among various hardware models or
       configurations---for example, 68010 vs 68020, floating coprocessor or
       none.  A single installed version of the compiler can compile for any
       model or configuration, according to the options specified.應該不經常使用吧。
 
將 option 傳給連接器:
gcc -Wl,a,b -> ld a b
-Wl,a,b=-Wl,a -Wl,b
 
man gcc  開頭一段指明的經常使用的選項,不錯。但整個文檔的體積太大了。確實無法看完。
http://www.antoarts.com/the-most-useful-gcc-options-and-extensions/ 對如何學習 gcc 有介紹,對常見選項有介紹,其中運行時檢測沒試出來
相關文章
相關標籤/搜索