《gcc五分鐘系列》第十五節:預編譯期選項(二):D
一般我們在開發項目時,都會做兩個版本,一個debug版,一個release版。
通常我們在debug版本中會加入調試輸出,而在release版本中,刪除這些輸出。
實現的方式是通過宏。
以一個簡單的函數爲例,這個函數僅僅輸出參數的值。但在debug版本中,輸出一些多餘的信息,比如函數名。
- #define __DEBUG__
- void output(int a){
- #ifdef __DEBUG__
- cerr<<"this is debug infor : "<<__FUNCTION__<<' '<<a<<endl;
- #endif
- cout<<a<<endl;
- }
如此,將#define __DEBUG__註釋掉就是release版本。
但是在一個大工程中,我們將所有的#define __DEBUG__註釋掉是一件非常痛苦的事情。
gcc提供了一種簡單的方法,可以在編譯時添加一些宏定義。使用-D選項。
代碼如下:
- void output(int a){
- #ifdef __DEBUG__
- cerr<<"this is debug infor : "<<__FUNCTION__<<' '<<a<<endl;
- #endif
- cout<<a<<endl;
- }
我們用g++ main.cpp -D__DEBUG__ 編譯出來的就是debug版本,用 g++ main.cpp 編譯出來的就是release版本。
擴展:
linux內核的部分編譯配置選項就是通過-D來設置的,如此,我們不需要修改源代碼,就可以編譯出ARM版本,i386版等。
本節完。