Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1704295
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2017-11-14 19:58:26

1、给代码传入宏定义开关。转自:
比如,你在代码里面需要定义一个宏DEBUG来打开调试开关,代码如下:
点击(此处)折叠或打开
  1. int main()
  2. {
  3.     int i=9;
  4.     
  5. #ifdef DEBUG
  6.     i=1;
  7. #else
  8.     i=0;
  9. #endif
  10.     printf("i=%d\n", i);
  11.     
  12.     return 0;
  13. }
一般来说,这个宏定义可以通过直接修改源文件进行,如在xxx.h或main.c中直接增加#define DEBUG。但这样显然不是很好的办法。另外一个办法是通过makefile修改,比如:

点击(此处)折叠或打开

  1. CFLAGS=-g -Wall -DDEBUG
  2. object=myprog
  3. all:$object
  4. myprog:a.c
  5.     gcc ${CFLAGS} a.c -o ${object}
如果更进一步,连makefile都不想修改,我们可以通过向make命令传递参数来进行,为此,我们需要适当的修改makefile如下:

点击(此处)折叠或打开

  1. CFLAGS=CFLAG
  2. CFLAGS+=-g -Wall
  3. object=myprog
  4. all:$object
  5. myprog:a.c
  6.     gcc ${CFLAGS} a.c -o ${object}
此时,如果想打开DEBUG宏,我们可以这样输入make命令:

点击(此处)折叠或打开

  1. make CFLAG=-DDEBUG
注意:gcc中的-D的理解:gcc提供了另外一种宏定义的方法
2、给Makefile传递参数。转自:Makefile 传入参数的方式
2.1、一种
Makefile中:

点击(此处)折叠或打开

  1. ifdef AAA
  2. CFLAGS = -Wall -c -DAAA
  3. endif

点击(此处)折叠或打开

  1. make AAA=1
2.2、另外一种
Makefile中:

点击(此处)折叠或打开

  1. ifequ(ARM, y)
  2. 执行事务
  3. enif

点击(此处)折叠或打开

  1. make ARM=y
2.3、还有一种
Makefile中:

点击(此处)折叠或打开

  1. TT_FLAG = FLAG
  2. TT_FLAG +=其他参数

点击(此处)折叠或打开

  1. make FLAG=加入参数
注意:如果把2.3这样写:
Makefile中:

点击(此处)折叠或打开

  1. TT_FLAG =其他参数

点击(此处)折叠或打开

  1. make TT_FLAG=加入参数
会出现什么样的结果,实测是:编译阶段TT_FLAG的值是make带进来的值。
另外,还遇到过一种方式也会替换掉“子”Makefile中的FLAG变量的值
子Makefile中:

点击(此处)折叠或打开

  1. CFLAG=参数1
父Makefile中:

点击(此处)折叠或打开

  1. make -C 子目录 CFLAG=参数2
结果是,编译阶段CFLAG的值是make -C带进来的参数2。
3、小结。转自:gcc编译选项
-Dmacro  
  相当于C语言中的#define macro  
-Dmacro=defn  
  相当于C语言中的#define macro=defn  
-Umacro  
  相当于C语言中的#undef macro 
-undef  
  取消对任何非标准宏的定义  
阅读(15461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~