在源代码里面如果这样是定义的: 那在makefile里面 这样就定义了预处理宏,编译的时候可选代码就会被编译进去了。 对于GCC编译器,有如下选项: 如: 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写法: $(SERVER_NAME):$(SERVER_OBJ) $(COM_OBJS) $(CC) -Wall -pthread -D KRC_SERVER_NAME=$(SERVER_NAME)_FLAG C代码中用法: #if KRC_SERVER_NAME == krc_search_FLAG#elif KRC_SERVER_NAME == krc_feedback_FLAG#else#endif注意:其中的两个参数为宏定义,不能使用常量定义,因为需要在预编译阶段就要确定其值!#define krc_search_FLAG 1#define krc_feedback_FLAG 2 这种用法也能实现条件编译的作用,而且更好! |
|
来自: 昵称15575832 > 《待分类》