宏编译的使用.
宏编译的使用,suricata源码中,有许多宏;怎么使用呢?
1,编译的时候把对应的宏编译进去;
2,分析你想使用的宏对应的代码,看看你想使用什么结果,是要使用这个函数本身,还是就是要使用它的返回值,增加对应的代码做处理;
3,确定结果,做完处理函数(或不做,之前的函数功能满足当前需求),编译,运行,测试结果;
4,单体测试,联调测试,能达成需求,这个事情就做好了;
下边是关于gcc 直接进行宏编译或者用makefile的使用情况;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
原文地址:http://blog.csdn.net/maopig/article/details/7230311
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 文件
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 main() 5 { 6 #ifdef p1 7 printf("Hello p1"); 8 #else 9 printf("Hello p2"); 10 #endif 11 12 }
1.
编译: gcc -o test test.c
运行: ./test
输出: Hello p2
2.
编译: gcc -o test test.c -D p1
运行: ./test
输出: Hello p1
关键词: 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文件的内容为:
1 #include <stdio.h> 2 3 int main() 4 { 5 6 #ifdef _YUQIANG 7 printf("Hello Yu Qiang, How are you?/n"); 8 #else 9 printf("Sorry to lost you. /n"); 10 #endif 11 12 return 0; 13 }
在端口中输入 make clean all
然后输入 ./myapp
结果 Hello Yu Qiang, How are you?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果你使用cmake添加预定义宏;
ADD_DEFINITIONS(-D 宏名称 -D宏名称 ......)