Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6378911
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16634
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: LINUX

2014-09-29 14:10:08

一、概念 

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

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

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

  二、实验

复制代码
测试程序:
#include  int main()
{
    #ifdef HELLO
    printf("HELLO defined !\n");
    printf("HELLO = %d\n",HELLO); #else printf("HELLO not define!\n"); #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
阅读(19817) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~