GCC编译参数详细说明
a. 基本编译命令:
gcc main.c
默认生成的可执行文件是 a.out
b. 如果需要指定输出文件,则需要使用如下的命令:
gcc main.c – o main
c.使用-Wall 选项可以输出所有的警告信息:
gcc -Wall main.c -o main
d. 输出 C 源码的预处理结果, 使用-E 选项,默认是输出控制台,可以将其重定向到文件保存:
gcc -E main.c > main.i
e. 如果只想输出汇编代码而非二进制代码,使用-S :
gcc -S main.c
f. 使用-C(大写) 选项只生成 C 程序对应的目标文件,但是不进行链接:
gcc -C main.c
g. 输出所有的中间文件, 使用-save-temps 选项:
gcc -save-temps main.c
h. 与共享库进行链接,应使用-l 选项再加上库程序的名字,例如,程序引用了 math 库中的 pow 函数:
gcc -Wall main.c -o main – lm
i. 编译生成共享库时,为了保证所生成的库可以被加载到合法的任意地址,需要使用-fPIC 选项,例如如下的命令生成一个名为 test.so 的共享库:
gcc -c -Wall -Werror -fPIC test.c
gcc -shared -o test.so test.o
j. 如果想查看编译器是怎么编译源程序的,以及每一步所使用的命令是什么,则应该使用-V 选项:
gcc -Wall -v main.c -o main
k. 使用-ansi 可以指定编译器编译源码时遵循的语言标准,例如如下代码按照 ISO C89 对源码进行编译:
gcc -Wall -ansi main.c -o main
l. 有些时候警告中往往预示着一些潜在的错误,因此部分项目在编译时要求将警告当做错误看到, 使用-Werror :
gcc -Wall -Werror main.c -o main
m. 经过优化的代码调试时可能会出现找不到声明的变量、控制流程发生变化、有些语句被直接跳过等现象。总而言之,不可能对编译之后的代码进行调试。为了让编译器生成额外的信息以利于程序的调试(例如使用 gdb),使用 -g 。
gcc -Wall -Werror – g main.c -o main
n. 使用-O0 选项可以禁用所有编译器优化,使用-O1、-O2 和-O3 逐步打开更多的优化选项。-Og 则在保证调试工作的同时完成了少量的优化。
o. 如果有一些宏需要在编译时代入, 使用-D 选项,例如如下的代码
#include<stdio.h>
int main(void)
{
#ifdef MY_MACRO
printf("\n Macro defined \n");
#endif
char c = -10;
// Print the string
printf("\n The Geek Stuff [%d]\n", c);
return 0;
}
使用如下的命令编译:
gcc -Wall -DMY_MACRO main.c -o main
则会打印输出相应的语句。
————————————————
版权声明:本文为CSDN博主「一只辛巴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lanshi00/article/details/104687072