zoukankan      html  css  js  c++  java
  • gcc -D选项

    一、概念 

       gcc的-D选项可以定义宏,这是什么意思呢?

        C语言源程序中有#define定义的宏,可以起到替换、条件编译的功能;定义宏的方式是放在头文件或者C文件中。gcc提供了另外一种宏定义的方法,当然可以想象这样的宏定义方法并不是很好用,但毕竟编译器给我们提供了额外的宏定义的方法。假设程序需要很多宏,不可能这些宏都在编译器中定义,可以说比较重要的宏才会放在gcc的D选项后边。

    -Dname 定义宏name,默认定义内容为字符串“1”
    
    -Dname=defn 定义宏name,并且内容为defn
    

      二、实验

    测试程序:
    #include <stdio.h> int main() { #ifdef HELLO printf("HELLO defined ! "); printf("HELLO = %d ",HELLO);
    #else printf("HELLO not define! "); #endif return 0; }

    1.执行编译命令:

    #gcc main.c -o main
    

     main的执行结果 :

    HELLO not define!

    2.执行编译命令:(条件编译测试)

    #gcc -DHELLO main.c -o main
    

     main的执行结果 :

    HELLO defined!

    HELLO = 1

    3.执行编译命令:(宏替换测试)

    #gcc -DHELLO=36 main.c -o main
    

     main的执行结果 :

    HELLO defined!

    HELLO = 36

    三、u-boot上的应用

    u-boot编译cpu/start.S的过程如下框中内容所示,红色部分就是gcc的-D选项应用

    arm-linux-gcc  -D__ASSEMBLY__ -g  -Os   -fno-strict-aliasing  -fno-common -ffixed-r8 -msoft-float -malignment-traps -D__KERNEL__ -DTEXT_BASE=0x33F80000  -I/share/u-boot-1.1.6/include -fno-builtin -ffreestanding -nostdinc -isystem /opt/EmbedSky/crosstools_3.4.5_softfloat/bin/../lib/gcc/arm-linux/3.4.5/include -pipe  -DCONFIG_ARM -D__ARM__ -march=armv4 -mapcs-32 -c -o start.o start.S

    参考博客:gcc -D:gcc的预定义功能  

  • 相关阅读:
    SparkStreaming整合Flume的pull方式之启动报错解决方案
    n-map安装实操
    性能测试从入门到入土的一点思考
    基于Influxdb对InfluxDBResultMapper的一点扩展
    数据库恢复技术
    (转引)数据库索引(MySQL)
    携程一面凉经
    一文总结机器学习常见模型
    深度学习实战
    DFS
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3423857.html
Copyright © 2011-2022 走看看