《gcc五分鐘系列》第十五節:預編譯期選項(二):D

《gcc五分鐘系列》第十五節:預編譯期選項(二):D

    一般我們在開發項目時,都會做兩個版本,一個debug版,一個release版。
    通常我們在debug版本中會加入調試輸出,而在release版本中,刪除這些輸出。
    實現的方式是通過宏。
    以一個簡單的函數爲例,這個函數僅僅輸出參數的值。但在debug版本中,輸出一些多餘的信息,比如函數名。
 

  1. #define __DEBUG__ 
  2.  
  3. void output(int a){ 
  4. #ifdef __DEBUG__ 
  5.     cerr<<"this is debug infor : "<<__FUNCTION__<<' '<<a<<endl; 
  6. #endif 
  7.     cout<<a<<endl; 


   
    如此,將#define __DEBUG__註釋掉就是release版本。
    但是在一個大工程中,我們將所有的#define __DEBUG__註釋掉是一件非常痛苦的事情。
   
    gcc提供了一種簡單的方法,可以在編譯時添加一些宏定義。使用-D選項。
   
    代碼如下:
   

  1. void output(int a){ 
  2. #ifdef __DEBUG__ 
  3.     cerr<<"this is debug infor : "<<__FUNCTION__<<' '<<a<<endl; 
  4. #endif 
  5.     cout<<a<<endl; 


   
    我們用g++ main.cpp -D__DEBUG__ 編譯出來的就是debug版本,用 g++ main.cpp 編譯出來的就是release版本。
   
   
    擴展:
    linux內核的部分編譯配置選項就是通過-D來設置的,如此,我們不需要修改源代碼,就可以編譯出ARM版本,i386版等。
   
    本節完。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章