$ gcc --help
Usage: gcc [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase
--help Display this information
--target-help Display target specific command line options
--help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
Display specific types of command line options
(Use '-v --help' to display command line options of sub-processes)
--version Display compiler version information
-dumpspecs Display all of the built in spec strings
-dumpversion Display the version of the compiler
-dumpmachine Display the compiler's target processor
-print-search-dirs Display the directories in the compiler's search path
-print-libgcc-file-name Display the name of the compiler's companion library
-print-file-name=<lib> Display the full path to library <lib>
-print-prog-name=<prog> Display the full path to compiler component <prog>
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory Display the root directory for versions of libgcc
-print-multi-lib Display the mapping between command line options and
multiple library search directories
-print-multi-os-directory Display the relative path to OS libraries
-print-sysroot Display the target libraries directory
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers
-Wa,<options> Pass comma-separated <options> on to the assembler
-Wp,<options> Pass comma-separated <options> on to the preprocessor
-Wl,<options> Pass comma-separated <options> on to the linker
-Xassembler <arg> Pass <arg> on to the assembler
-Xpreprocessor <arg> Pass <arg> on to the preprocessor
-Xlinker <arg> Pass <arg> on to the linker
-save-temps Do not delete intermediate files
-save-temps=<arg> Do not delete intermediate files
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components
-pipe Use pipes rather than intermediate files
-time Time the execution of each subprocess
-specs=<file> Override built-in specs with the contents of <file>
-std=<standard> Assume that the input sources are for <standard>
--sysroot=<directory> Use <directory> as the root directory for headers
and libraries
-B <directory> Add <directory> to the compiler's search paths
-v Display the programs invoked by the compiler
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-o <file> Place the output into <file>
-pie Create a position independent executable
-shared Create a shared library
-x <language> Specify the language of the following input files
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension
Options starting with -g, -f, -m, -O, -W, or --param are automatically
passed on to the various sub-processes invoked by gcc. In order to pass
other options on to these processes the -W<letter> options must be used.
-x language filename
设定文件所使用的语言, 使后缀名无效, 对以后的多个有效
gcc -x c hello.pig
-x none filename
关掉上一个选项, 也就是让 gcc 根据文件名后缀, 自动识别文件类型
gcc -x c hello.pig -x none hello2.c
-E
只预处理, 查看结果需要重定向
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
-S
只激活预处理和编译, 生成 .s 的汇编代码
gcc -S hello.c
-c
只激活预处理, 编译, 和汇编, 生成 .o 的 obj 文件
gcc -c hello.c
-o FILE
编译后产生的文件名
gcc -o hello.exe hello.c
gcc -o hello.asm -S hello.c
-std c89
-std c99
-std c11
-std gnu99
-std gnu11
-std c++98
-std c++11
-ansi
关闭 gnu c 中与 ansi c 不兼容的特性 , 激活 ansi c 的专有特性 ( 包括禁止一些 asm inline typeof 关键字 , 以及 UNIX,vax 等预处理宏
-lxx
-llibxx.so
-Lxx
-LDir
-Ixx
-IInclude
-O0
不进行优化处理
-O -O1 -O2 -O3
-shared -static
-w
不生成任何警告信息
-Wall
生成所有警告信息
-W
不包含在Wall中一般情况下,-W 和 -Wall同时使用
-Werror
将warn视为error并停止编译
-Dmacro
#define macro
32位版:加上 -m32 参数,生成32位的代码64位版:加上 -m64 参数,生成64位的代码debug版:加上 -g 参数,生成调试信息release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库
加上 -O3 参数,进行最快速度优化
加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言
当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如
32位Linux下的GCC,默认是编译为32位代码64位Linux下的GCC,默认是编译为64位代码Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下