筆記.g++ 編譯選項

PixelCat31415

有些好用的 g++ 編譯選項每次都看過就忘了,寫下來當作以後的 reference。

基本指令

1
g++ [options] file...

file 可以有很多個,.cpp.o 也都可以。

選項

一般

  • -o file
    指定輸出檔名為 file
  • -std=c++xx
    指定 c++ 語法版本為 xx
  • -D XXX -DXXX
    等於加上 #define XXX,空格可有可無

編譯

  • -E
    進行預處理,輸出預處理結果。不指定輸出檔名的話直接輸出到 stdout
  • -S
    進行預處理和編譯,輸出組合語言檔 .s
  • -c
    編譯但不連結,輸出目的檔 .o

優化

  • -O0 -O1 -O2 -O3 -Ofast
    一般編譯優化

警告、除錯

  • -Wall
    很多警告
  • -Wextra
    更多警告
  • -Wshadow
    區域變數跟別人撞名的警告
  • -Wconversion
    沒有好好轉型別的警告
  • -fsanitize=address
    幫你抓記憶體亂戳
  • -fsanitize=undefined
    幫你抓未定義行為
  • -D_GLIBCXX_DEBUG
    幫你抓 STL 亂用,編譯時間超級慢

其他

  • --verbose
    變吵。可以用來偷看 include 路徑

TL;DR

競程向編譯指令,最後一行自選。

1
2
3
4
5
6
g++ {file}.cpp -o {file}.out
-std=c++14
-D LOCAL
-O2
-Wall -Wextra -Wshadow -Wconversion
-fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUG