Debian系统中的GCC编译器提供了许多选项来控制编译过程。以下是一些常用的GCC编译选项及其功能:
-o
:指定输出文件名称。-E
:只进行预处理。-S
:只进行预处理、编译。-c
:只预处理、编译、汇编,但不链接。-D
:使用-D name[=definition]
预定义名为name
的宏,若不指定值则默认宏的内容为1。-l
:使用-l libname
或者-llibname
,使链接器在链接时搜索名为libname.a/libname.so
(静态/动态)的库文件。-L
:使用-Ldir
添加搜索目录,即链接器在搜索-l
选项指定的库文件时,除了系统的库目录还会(优先)在-L
指定的目录下搜索。-I
(大写的i
):使用-I dir
,将目录dir
添加为头文件搜索目录。-include
:使用-include file
,等效于在被编译的源文件开头添加#include "file"
。-static
:指定静态链接(默认是动态链接)。-O0
~-O3
:开启编译器优化,-O0
为不优化,-O3
为最高级别的优化。-Os
:优化生成代码的尺寸,使能所有-O2
的优化选项,除了那些让代码体积变大的。-Og
:优化调试体验,在保留调试信息的同时保持快速的编译,对于生成可调试代码,比-O0
更合适,不会禁用调试信息。-Wall
:使编译器输出所有的警告信息。-march
:指定目标平台的体系结构,如-march=armv4t
,常用于交叉编译。-mtune
:指定目标平台的CPU以便GCC优化,如-mtune=arm9tdmi
,常用于交叉编译。此外,GCC还提供了一些其他的选项,如-fno-xxx
系列用于控制编译器警告和错误信息的输出,-fxxx
系列用于控制编译器的行为,如静态链接、目标代码生成等。
要在Debian系统上使用这些选项,你可以在编译命令中添加相应的参数。例如,要编译一个名为main.c
的C程序并启用所有警告和优化,你可以使用以下命令:
gcc -Wall -O2 -o main main.c