美文网首页
四、gcc使用选项

四、gcc使用选项

作者: 离港时的灯塔 | 来源:发表于2020-03-11 22:53 被阅读0次

    1、关于输出信息的
    --version                                显示 gcc 版本号和版权信息
    --help    /--target-help        显示 gcc 帮助说明。‘target-help’是显示目标机器特定的命令行选项。
    -v                                             打印较多信息,显示编译器调用的程序。

    2、关于编译链接选项
    -E                   仅作预处理,不进行编译、汇编和链接        输出.i文件
    -S                   仅编译到汇编语言,不进行汇编和链接          输出.S 文件
    -c                    编译、汇编到目标代码,不进行链接              输出.o文件
    -l     library   链接时搜索名为library的库。例子: $ gcc test.c -lm -o test
    -I   dir             把dir加入到搜索头文件的路径列表中。 $ gcc test.c -I../inc -o test
    LD_LIBRARY_PATH:                这个环境变量指示动态连接器可以装载动态库的路径。
    -fPIC                表示编译为位置独立的代码
    -L    dir            把dir加入到搜索库文件的路径列表中。gcc -I/home/foo -L/home/foo -ltest test.c -o test
    -D    name       预定义一个名为name的宏,值为1。 $ gcc -DTEST_CONFIG test.c -o test
    -D    name =definition      预定义一个名为name值为definition的宏。。 $ gcc -DTEST_CONFIG test.c -o test
    -ggdb   level    为调试器 gdb 生成调试信息。level可以为1,2,3,默认值为2。
    -s                       去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。
    -C                    告诉预处理器不要丢弃注释。配合`-E'选项使用。$ gcc test.c --C   -o test
    -static            在支持动态链接的系统上,阻止连接共享库。
    -shared         该选项指定生成动态连接库
    -nostdlib        不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。

    3、关于警告信息的
    -Wall                  会打开一些很有用的警告选项,建议编译时加此选项。
    -w                        禁止显示所有警告信息。
    -Wpointer-arith    对函数指针或者void *类型的指针进行算术操作时给出警告。 -Wall 并不会打开此项。
    -Wcast-qual          当强制转化丢掉了类型修饰符时给出警告。 -Wall 并不会打开此项
    -Waggregate-return    如果定义或调用了返回结构体或联合体的函数,编译器就发出警告。
    -Winline                   无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。
    -Werror                    把警告当作错误。出现任何警告就放弃编译。
    -Wunreachable-code        如果编译器探测到永远不会执行到的代码,就给出警告。也是比较有用的选项。
    -Wcast-align            一旦某个指针类型强制转换导致目标所需的地址对齐增加时,编译器就发出警告。
    -Wundef                    当一个没有定义的符号出现在 #if 中时,给出警告。
    -Wredundant-decls    如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。

    4、关于编译优化的
    -O0                        禁止编译器进行优化。默认为此项。
    -O1                        尝试优化编译时间和可执行文件大小。
    -O2                        更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
    -O3                        在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 
    -finline-functions        把所有简单的函数内联进调用者。编译器会探索式地决定哪些函数足够简单,值得做这种内联。
    -fstrict-aliasing        施加最强的别名规则(aliasing rules)。

    5、编译标准的选择
    -ansi                支持符合ANSI标准的C程序。这样就会关闭GNU C中某些不兼容ANSI C的特性。
    -std=c89         指明使用标准 ISO C90 作为标准来编译程序。
    -std=c99         指明使用标准 ISO C99 作为标准来编译程序。
    -std=c++98    指明使用标准 C++98 作为标准来编译程序。
    -std=gnu9x      使用 ISO C99 再加上 GNU 的一些扩展。
    -fgnu89-inline    告诉编译器在 C99 模式下看到 inline 函数时使用传统的 GNU 句法。
    -fno-asm            不把asm, inline或typeof当作关键字,因此这些词可以用做标识符。用 __asm__, __inline__和__typeof__能够替代它们。 `-ansi' 隐含声明了`-fno-asm'。

    6、关于机器的依赖
    -mtune=cpu-type            为指定类型的 CPU 生成代码。cpu-type可以是:i386,i486,i586,pentium,i686,pentium4 等等。
    -msse                                 
    -msse2
    -mmmx
    -mno-sse
    -mno-sse2
    -mno-mmx
    -m32                             生成32位机器上的代码。
    -m64                            生成64位机器上的代码。
    -mpush-args             (不)使用 push 指令来进行存储参数。默认是使用
    -mno-push-args
    -mregparm=num        当传递整数参数时,控制所使用寄存器的个数。

    相关文章

      网友评论

          本文标题:四、gcc使用选项

          本文链接:https://www.haomeiwen.com/subject/cqgfjhtx.html