makefile是为组织程序工程的,其定义的宏怎样应用到c程序中呢?

我们知道Makefile中可定义变量或导出变量,make命令可定义变量;编译器(如gcc)可通过CFLAGS定义宏。

但如何才能使Makefile或make命令用变量控制C程序呢?

C程序可以接收编译器定义的宏,通过-D指定。makefile中将make命令或makefile中变量通过编译器-D参数传递到C程序是关键。

    宏定义使用前缀-D,在编译过程中可以把宏定义追加到CFLAG中。宏定义有两种相似的写法
【第一种】-D DEFINES
【第二种】-D DEFINES=CONDITION

注:可以在C语言中直接使用宏定义,如同C文件开始#define定义一样,但要注意变量定义格式(字符串要用引号)。

如判断SOC是TI则C程序执行特殊动作(SOC_TI),流程如下:

1. make命令执行时,定义SOC=TI。

make SOC=TI

2. makefile中判断SOC变量。

ifeq ( "$SOC", "TI")

  SOC_FLAG = -DSOC_TI

endif

3. CFLAGS增加宏

CFLAGS += $(SOC_FLAG)

foo:foo.o bar.o

  cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)

4. 在C程序中增加宏判断

#ifdef SOC_TI

  todo...

#endif

通过上述过程SOC=TI变量定义就传导到C程序中。

参考:

1. Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D

2.Linux学习笔记——例说makefile 增加宏定义

最新文章

  1. [lua]安卓ndk如何编译lua库
  2. nodejs将PDF文件转换成txt文本,并利用python处理转换后的文本文件
  3. SmartImageView&常见的开源代码
  4. 【转】深入浅出 JavaScript 中的 this
  5. 161018--NOIP模拟
  6. python 自动化之路 day 04
  7. C语言运算符的优先级
  8. centos 7 部署 open-falcon 0.2.0
  9. About Swift
  10. ActiveReport系列报表开发随笔收集
  11. 《剑指offer》-数字在排序数组中出现的次数
  12. vue2.0学习笔记之路由(二)路由嵌套+动画
  13. Java文件管理系统
  14. [译]Intel App Framework 3.0的变化
  15. Qt addStretch()详解
  16. [HNOI2004]宠物收养场
  17. Windows上的巧克力味Chocolatey详解
  18. 循环遍历正则验证input框内容合法性
  19. 【51Nod1258】序列求和V4(FFT)
  20. C#使用NOPI生成excel要点记载

热门文章

  1. 【MySQL笔记】Excel数据导入Mysql数据库的实现方法——Navicat
  2. perspective 的笔记
  3. Matlab与C++混合编程 编写独立外部应用程序时出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误
  4. android_我的第一个Android程序
  5. Android 中 Environment.getExternalStorageDirectory()无效
  6. webpack配置:css文件打包、JS压缩打包和HTML文件发布
  7. 【HTTPS双向加密认证】
  8. 基于Spark机器学习和实时流计算的智能推荐系统
  9. Android实现批量照片上传至server,拍照或者从相冊选择
  10. Android TextView 常见问题与使用总结