C语言如何根据Makefile配置宏定义值进行编译预处理 #if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
·
场景
开发中经常需要根据一些配置使用不同的代码块,比如根据配置决定是否用不同的代码实现某个接口,或者根据配置决定在内核态或者用户态使用不同的接口。
Makefile中定义
CFLAGS = \
-DCFG_XXX_TYPE=1
注意这里不能定义成字符串比如 CFG_XXX_TYPE=“abc” 然后C语言中进行 CFG_XXX_TYPE == “CFG_XXX_TYPE”
C语言中使用
#if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
#define SET_DFT_LEN 10
int a = 1;
#else
#define SET_DFT_LEN 20
int a = 2;
#endif
注意 试用了 defined以及配置 && 进行 ==比较
如果多个就添加
#else if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 2)
常用场景
- 同一个函数有2种实现,根据配置决定是否用模拟代码
#if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
int func1(void) {
printf("this is a stub\n");
return 0;
}
#else
int func1(void) {
return hardware_read();
}
#endif
- 或者根据配置决定在内核态或者用户态使用不同的接口
#if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
kthread_create(xxx);
#else
pthread_create(xxx);
#endif
- 包含不同的头文件等
#if defined(CFG_XXX_TYPE) && (CFG_XXX_TYPE == 1)
#include "kernel.h"
#else
#include "userspace.h"
#endif
…
更多推荐

所有评论(0)