赞
踩
提笔简要记录方法
2个变量:makefile变量(命令行和文件中)与C宏定义变量
3个空间:命令行空间、Makefile文件中、C文件中
2种if:ifeq、if defined
Makefile通过CONFIG变量或者命令行参数,进行配置是否编译某些代码或者编译参数,同步传递给C语言的GCC宏定义
Makefile中:
## 配置定义区 start ?表示如果命令行或者其他地方定义了可以直接使用配置的 CONFIG_FEATURE_A ?= y CONFIG_FEATURE_UNIT_TEST ?= y# 注意这里如果有注释y和#之间不能有空格 ## 配置定义区 end # 显示配置信息 $(info CONFIG_FEATURE_A=$(CONFIG_FEATURE_A)) # 使用配置信息 ifeq ($(CONFIG_FEATURE_A), y) srcs += 1.c \ feature_a.c else srcs += 1.c \ feature_a.c endif # 根据配置信息传递给C的宏定义 ifeq ($(CONFIG_FEATURE_A), y) CFLAGS += -D123 -DMACRO_CONFIG_FEATURE_A else CFLAGS += -D123 endif
C语言中:
#if defined(MACRO_CONFIG_FEATURE_A)
printf("MACRO_CONFIG_FEATURE_A on\n");
#else
printf("MACRO_CONFIG_FEATURE_A off\n");
#endif
C语言中还可以更加灵活的增加变量的方式
#if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
make CONFIG_FEATURE_A=n #不打开
make CONFIG_FEATURE_A=y #打开
结论:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。