宏編譯的使用,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宏名稱 ......)
