Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
在源代码里面如果这样是定义的:
#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相关推荐
- php 如何宏定义,[PHP] PHP源码常用代码中的宏定义
PHP源码常用代码宏定义: #define 宏名 字符串 #表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表 ...
- java定义接口_一文知道Java中接口的定义
使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: 方法:接口中的方法只有定义而没有被实现. ...
- python定义一个列表_如何在Python中创建用户定义的列表?
你需要将怪物的数量发送给使用它的函数:def welcome(): number = monsters() print('Alright, ' + str(number) + ' monsters.' ...
- 使用gcc的-E -P选项展开源代码中的宏
使用gcc的-E -P选项展开源代码中的宏- - 原文出处:http://journeyboy.bokee.com/614 ...
- Linux内核中max()宏的奥妙何在?(二)——大神Linus对这个宏怎么看?
最新max()宏 上回,我们在<Linux内核中max()宏的奥妙何在?(一)>一文中说到,在3.18.34版Linux内核源码中的max()宏,采用了GCC的扩展特性,可以避免一些错误. ...
- 解决C/C++语言中全局变量重复定义的问题
前言 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面.于是,想把自己的代码中的各个模块分离开来,以便更好地阅读和管理. 遇到的问题 我的做法是: 宏定义.结构体定义.函 ...
- ppt录制宏_Word中录制宏,学会后成大神
Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...
- Word中录制宏,学会后成大神
Word中录制宏,学会后成大神 Word是日常工作.生活不可避免的工具,掌握word的一些技巧,可以提高效率,让工作事半功倍,下面由办公吧(offices8.com)整理的如何在word中使用宏. 这 ...
- 如果宏安全性设置为“禁用所有宏,并且不通知”,将自动禁用所有宏。使用下列步骤可启用宏。
打开world2007,出现如下错误提示: 如果宏安全性设置为"禁用所有宏,并且不通知",将自动禁用所有宏.使用下列步骤可启用宏. 在"信任中心"对话框中,单击 ...
最新文章
- c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
- 从零写一个编译器(五):语法分析之自动机的缺陷和改进
- LeetCode之字符串(C++)的切割简单实现
- Code Names
- 优酷视频手机上能发现投屏设备,但投屏失败?
- [LeetCode]Remove Nth Node From End of List
- 递推——覆盖墙壁(洛谷 P1990)
- centos配置mysql
- java字符串不可变_Java字符串真的是不可变的吗?
- python简单程序实例-python实现的简单窗口倒计时界面实例
- 十天学会单片机(1)单片机的认识、各进制、门运算、c51
- 菜鸟AJAX 教程和JSON
- (附源码)springboot通用数据展示系统 毕业设计 200934
- 网络操作系统和分布式系统区别简介
- 华大MCU(五):HC32F460串口IAP升级boot部分
- java求两个数的最小公倍数的方法_Java程序查找两个数字的最小公倍数
- Matplotlib 绘图库从入门到精通
- t480 拆触摸板_thinkpadt480 win10电脑触摸板键盘失效怎么修复
- 鸿蒙系统休眠时间,关闭系统休眠功能利弊
- Azure IoT 技术研究系列4
热门文章
- 使用pandas时遇到ValueError: numpy.dtype has the wrong size, try recompiling
- [bzoj2243][SDOI2011]染色
- Linux下git的使用——将已有项目放到github上
- Serializable接口中serialVersionUID字段的作用
- 【转】DB2 常用命令
- 一步一步学Silverlight 2系列(3):界面布局_转载
- webpack之externals操作三部曲--正确的姿势
- 使用pm2启动Node和Vue项目教程
- Ajax — 新闻列表
- 589-N叉树的前序遍历