在源代码里面如果这样是定义的:
#ifdef   MACRONAME
//可选代码
#endif

那在makefile里面
gcc   -D   MACRONAME=MACRODEF
或者
gcc   -D   MACRONAME

这样就定义了预处理宏,编译的时候可选代码就会被编译进去了。

对于GCC编译器,有如下选项:
        -D macro=string,等价于在头文件中定义:#define   macro   string。例如:-D TRUE=true,等价于:#define   TRUE   true
        -D macro,等价于在头文件中定义:#define   macro   1,实际上也达到了定义:#define   macro的目的。例如:-D LINUX,等价于:#define   LINUX   1(与#define   LINUX作用类似)。
        --define-macro   macro=string与-D macro=string作用相同。

如:

TEST.C 文件

#include <stdio.h>
#include <stdlib.h>

main()
{
#ifdef p1
  printf("Hello p1");
#else
  printf("Hello p2");
#endif
 
}

1.

编译: gcc -o test test.c

运行: ./test

输出: Hello p2

2.

编译: gcc -o test test.c -D p1

运行: ./test

输出: Hello p1

在Makefile中进行宏定义-D

关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D

在Makefile中我们可以通过宏定义来控制源程序的编译。只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可。

如:
CFLAGS += -D _YUQIANG
在编译的时候加上此选项就可以了: $(CC) $(CFLAGS) $^ -o $@

下面是我写的一个测试文件:

例如:

Makefile文件内容为:

CC = gcc
RM = rm

CFLAGS += -D _YUQIANG

TARGETS := myapp

all:$(TARGETS)

$(TARGETS):main.c
$(CC) $(CFLAGS) $^ -o $@

clean:
-$(RM) -f *.o
-$(RM) -f $(TARGETS)

main.c文件的内容为:
#include <stdio.h>

int main()
{

#ifdef _YUQIANG
printf("Hello Yu Qiang, How are you?/n");
#else
printf("Sorry to lost you. /n");
#endif

return 0;
}

在端口中输入    make clean all
然后输入           ./myapp

结果                  Hello Yu Qiang, How are you?

Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D相关推荐

  1. php 如何宏定义,[PHP] PHP源码常用代码中的宏定义

    PHP源码常用代码宏定义: #define 宏名 字符串 #表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表 ...

  2. java定义接口_一文知道Java中接口的定义

    使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: 方法:接口中的方法只有定义而没有被实现. ...

  3. python定义一个列表_如何在Python中创建用户定义的列表?

    你需要将怪物的数量发送给使用它的函数:def welcome(): number = monsters() print('Alright, ' + str(number) + ' monsters.' ...

  4. 使用gcc的-E -P选项展开源代码中的宏

    使用gcc的-E -P选项展开源代码中的宏- -                                        原文出处:http://journeyboy.bokee.com/614 ...

  5. Linux内核中max()宏的奥妙何在?(二)——大神Linus对这个宏怎么看?

    最新max()宏 上回,我们在<Linux内核中max()宏的奥妙何在?(一)>一文中说到,在3.18.34版Linux内核源码中的max()宏,采用了GCC的扩展特性,可以避免一些错误. ...

  6. 解决C/C++语言中全局变量重复定义的问题

    前言 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面.于是,想把自己的代码中的各个模块分离开来,以便更好地阅读和管理. 遇到的问题 我的做法是: 宏定义.结构体定义.函 ...

  7. ppt录制宏_Word中录制宏,学会后成大神

    Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...

  8. Word中录制宏,学会后成大神

    Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...

  9. 如果宏安全性设置为“禁用所有宏,并且不通知”,将自动禁用所有宏。使用下列步骤可启用宏。

    打开world2007,出现如下错误提示: 如果宏安全性设置为"禁用所有宏,并且不通知",将自动禁用所有宏.使用下列步骤可启用宏. 在"信任中心"对话框中,单击 ...

最新文章

  1. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
  2. 从零写一个编译器(五):语法分析之自动机的缺陷和改进
  3. LeetCode之字符串(C++)的切割简单实现
  4. Code Names
  5. 优酷视频手机上能发现投屏设备,但投屏失败?
  6. [LeetCode]Remove Nth Node From End of List
  7. 递推——覆盖墙壁(洛谷 P1990)
  8. centos配置mysql
  9. java字符串不可变_Java字符串真的是不可变的吗?
  10. python简单程序实例-python实现的简单窗口倒计时界面实例
  11. 十天学会单片机(1)单片机的认识、各进制、门运算、c51
  12. 菜鸟AJAX 教程和JSON
  13. (附源码)springboot通用数据展示系统 毕业设计 200934
  14. 网络操作系统和分布式系统区别简介
  15. 华大MCU(五):HC32F460串口IAP升级boot部分
  16. java求两个数的最小公倍数的方法_Java程序查找两个数字的最小公倍数
  17. Matplotlib 绘图库从入门到精通
  18. t480 拆触摸板_thinkpadt480 win10电脑触摸板键盘失效怎么修复
  19. 鸿蒙系统休眠时间,关闭系统休眠功能利弊
  20. Azure IoT 技术研究系列4

热门文章

  1. 使用pandas时遇到ValueError: numpy.dtype has the wrong size, try recompiling
  2. [bzoj2243][SDOI2011]染色
  3. Linux下git的使用——将已有项目放到github上
  4. Serializable接口中serialVersionUID字段的作用
  5. 【转】DB2 常用命令
  6. 一步一步学Silverlight 2系列(3):界面布局_转载
  7. webpack之externals操作三部曲--正确的姿势
  8. 使用pm2启动Node和Vue项目教程
  9. Ajax — 新闻列表
  10. 589-N叉树的前序遍历