宏編譯的使用.


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM