【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
linux gcc参数集
https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
0. GCC 与 gcc
GCC, The GNU Compiler Collection
includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,…).
gcc, GNU project C and C++ compiler
1. 简述gcc的编译流程
我们通常所说的编译指的是下面的整个过程, 而不是特指编译那个步骤.
2. gcc指令的一般格式
gcc [选项] 要编译的文件 [ -o 目标文件]
3. gcc指令的常用参数
参数 | 含义 | 举个例子 |
---|---|---|
-o | 重命名输出文件(Place the output into < file >.) | gcc file.c -o file |
-O | 对程序进行优化, 优化等级O3>O2>O1=O | gcc -O3 file.c -o file.i |
-L | 指定库文件的搜索路径 | gcc -L /usr/lib file.c -o file.i |
-l(小L) | 指定库文件 | gcc -lm file.c -o file.i |
-I(大i) | 指定头文件的搜索路径 | gcc -I . file.c -o file.i |
-D | 宏定义 | gcc -D’TEST=“test”’ file.c -o file |
4. gcc指令的常用调试参数
参数 | 含义 | 举个例子 |
---|---|---|
-g | 产生符号调试工具(GNU的gdb)所必要的符号信息g3>g2=g>g1 | gcc -g3 file.c -o file |
-pedantic | 在编译不符合ANSI/ISO C语言标准的源代码时, 将产生相应的警告信息 | gcc -pedantic file.c -o file |
-Wall | 产生尽可能多的警告信息 | gcc -Wall file.c -o file |
-Werror | 将所有的警告当成错误进行处理 | gcc -Werror file.c -o file |
-Wcast-align | 当源程序中地址不需要对齐的指针指向一个地址需要对齐的变量地址时, 产生一个警告 | gcc -Wcast-align file.c -o file |
-v | 输出 gcc 工作的详细过程 | gcc -v file.c -o file |
-Wl,-Map=file.map | 生成映射文件 | gcc -Wl,-Map=file.map file.c -o file |
-p/-pg | 将剖析(Profiling)信息加入到最终生成的二进制代码中 | gcc -p file.c -o file |
5. gcc指令的编译相关参数
参数 | 含义 | 举个例子 |
---|---|---|
-E | 预处理(Preprocess only; do not compile, assemble or link.) | gcc -E file.c -o file.i |
-S | 预处理 - 编译(Compile only; do not assemble or link.) | gcc -S file.c -o file.s |
-c | 预处理 - 编译 - 汇编(Compile and assemble, but do not link.) | gcc -c file.c -o file.o |
-save-temps | 保存编译过程中生成的一些列中间文件(file.i file.o file.s) | gcc -save-temps file.c -o file.o |
-M | 获取目标的完整依赖关系 | gcc -M test.c |
-MM | 获取目标的部分依赖关系 | gcc -MM test.c |
-e | 用于在链接时指定入口函数, 自定义入口函数时必须使用-nostartfiles选项进行链接 | 暂未搞懂~ |
6. gcc指令的其他常见参数
参数 | 含义 | 举个例子 |
---|---|---|
–target-help | 显示目前所用的gcc支持CPU类型 | gcc --target-help |
-Q | 显示编译过程的统计数据和每一个函数名 | gcc -Q file.c -o file |
-static | 编译时强制使用静态链接库 | gcc -static file.c -o file |
-shared | 生成一个共享的目标文件(也就是动态库文件) | gcc -shared file.c -o file.so |
-fPIC | 告诉编译器产生与位置无关代码(Position-Independent Code) | gcc -fPIC -shared file.c -o file |
-funsigned-char | 将char解释为符号的char | gcc -funsigned-char file.c -o file |
7. gcc指令的黑科技
1. 使用@参数从文件中读取参数:
$cat param.txt
-Wall
$gcc @param.txt file.c -o file
2. 使得gcc支持ISO C89风格:
$gcc -ansi file.c -o file
3. 使得gcc支持指定的c/c++的标准:
$gcc -std=c++11 file.cpp -o file
标准如 c++11, c++14, c90, c89等
4. 使用-static-libstdc++静态链接libstdc++:
$gcc -static-libstdc++ file.c -o file
默认使用libstdc++共享库, 而-static-libstdc++可以指定使用libstdc++静态库.