簡單點說,加上-d選項就是在編譯時增加對-d後面的巨集的定義。來看個簡單的例子吧,源程式(a.c)如下:
#include int main(int argc, char *argv)
編譯及輸出如下:
[root@test #9]#gcc -dmydebug -g -o a1 a.c @1
[root@test #11]#./a1
test
hello world
[root@test #12]#gcc -ddebug -g -o a2 a.c @2
[root@test #13]#./a2
hello world
[root@test #14]#gcc -g -o a3 a.c @3
[root@test #15]#./a3
hello world
可見,第2和第3條編譯指令的輸出結果是一樣的,為什麼呢?
先看@1,因為源程式中有條件判斷,是否定義了巨集「mydebug」,而該編譯指令中剛好帶了"mydebug",所以就輸出了「test";
接著看@2, 編譯指令中-d後是」debug「,這個針對」#ifdef mydebug"而言就是false,所以就不會輸出「test";
最後看@3, 編譯指令中無-d選項,所以也不會輸出」test"。
這樣做比較,相信大家都明白這個-d的含義了吧。不信,就親自動手試試吧。
利用makefile檔案的編
寫在編譯系統的時候,我們一般只要簡單的輸入make執行就可以了。但有時候,我們還是需要讓make命令帶入一些引數給makefile指令碼。
比如,你在**裡面需要定義乙個巨集debug來開啟除錯開關,**如下:
int main()
cflags=-g -wall -ddebug一般來說,這個巨集定義可以通過直接修改源**進行,但這樣顯然不是很好的辦法。另外乙個辦法是通過makefile修改,比如:object=myprog
all:$object
myprog:a.c
gcc $ a.c -o $
cflags=-g -wall -ddebugobject=myprog
all:$object
myprog:a.c
gcc $ a.c -o $
如果更進一步,連makefile都不想修改,我們可以通過向make命令傳遞引數來進行,為此,我們需要適當的修改makefile如下:
cflags=cflagcflags+=-g -wall -ddebug
object=myprog
all:$object
myprog:a.c
gcc $ a.c -o $
此時,如果想開啟debug巨集,我們可以這樣輸入make命令:
[ychq@icm3-2 net]$ make cflag=-ddebug我們可以發現,debug巨集已經被正確的傳入。gcc -g -wall -ddebug a.c
a.c: in function `main':
a.c:9: warning: implicit declaration of function `printf' [ychq@icm3-2 net]$
更進一步的,我們可以通過傳遞不同的引數給make,讓make編譯不同的模組。
gcc D選項的作用
gcc d選項在man中的說明如下 簡單點說,加上 d選項就是在編譯時增加對 d後面的巨集的定義。來看個簡單的例子吧,源程式 a.c 如下 cpp include intmain intargc,char argv 編譯及輸出如下 root test 9 gcc dmydebug g o a1 a....
gcc D選項的作用
簡單點說,加上 d選項就是在編譯時增加對 d後面的巨集的定義。來看個簡單的例子吧,源程式 a.c 如下 cpp include intmain intargc,char argv 編譯及輸出如下 root test 9 gcc dmydebug g o a1 a.c 1 root test 11 a...
gcc D選項定義巨集
gcc的 d選項可以定義巨集。假設程式需要很多巨集,不可能這些巨集都在編譯器中定義,可以說比較重要的巨集才會放在gcc的d選項後邊。dname 定義巨集name,預設定義內容為字串 1 dname defn 定義巨集name,並且內容為defn 測試程式 include int main 執行編譯命...