gcc D選項的作用

2021-07-29 14:40:41 字數 1785 閱讀 1389

簡單點說,加上-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 

object=myprog

all:$object

myprog:a.c

gcc $ a.c -o $

一般來說,這個巨集定義可以通過直接修改源**進行,但這樣顯然不是很好的辦法。另外乙個辦法是通過makefile修改,比如:

cflags=-g -wall -ddebug 

object=myprog

all:$object

myprog:a.c

gcc $ a.c -o $

如果更進一步,連makefile都不想修改,我們可以通過向make命令傳遞引數來進行,為此,我們需要適當的修改makefile如下:
cflags=cflag

cflags+=-g -wall -ddebug

object=myprog

all:$object

myprog:a.c

gcc $ a.c -o $

此時,如果想開啟debug巨集,我們可以這樣輸入make命令:
[ychq@icm3-2 net]$ make cflag=-ddebug 

gcc -g -wall -ddebug a.c

a.c: in function `main':

a.c:9: warning: implicit declaration of function `printf' [ychq@icm3-2 net]$

我們可以發現,debug巨集已經被正確的傳入。

更進一步的,我們可以通過傳遞不同的引數給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 執行編譯命...