2011-11-27 63 views
0

在我工作的makefile中,gcc與-D XOPEN_SOURCE=500 and -D_BSD_SOURCE選項一起使用。 gcc --help不告訴我這些是什麼;快速谷歌搜索也沒有幫助。我是一個gcc的新手,有人能給我一個提示嗎?那些gcc選項在做什麼?

回答

4

按照GCC文檔("3.11 Options Controlling the Preprocessor")時,-D開關定義了宏XOPEN_SOURCE_BSD_SOURCE與值分別5001。就好像你在所有的源文件的開頭這段代碼傳遞給GCC:

#define XOPEN_SOURCE 500 
#define _BSD_SOURCE 1 

構建腳本通常採取的編譯器,以「插入」宏像這些以「溝通」爲源能力優勢關於目標平臺的代碼細節(例如操作系統版本)。

-D的「反向」命令​​行開關是-U,其中#undef是宏。

大多數(如果不是全部的話)現代C/C++編譯器包含類似的開關。例如,Visual C++編譯器接受/D compiler switch,這基本上與GCC的-D交換機具有相同的用途。


以供將來參考,the GCC option index是偉大的,如果你需要查看編譯器開關的GCC編譯器。

+0

謝謝您的回答,但我在GCC選項索引中找不到-D選項? – mort

+1

@mort:選項索引按字母順序排列,並且各個開關沒有短劃線(s)。所以你會在「current_version」之後和「d」之前找到「D」。你只需要看起來更難。 :-) –

1

-D設定了一個定義。這就像添加包含頭文件:

#define XOPEN_SOURCE 500 
#define _BSD_SOURCE 1 

然後可以使用#ifdef _BSD_SOURCE,使代碼的某些部分的條件編譯。

2

-D用於設置定義。您正在編譯的源代碼很可能是使用這些定義來包含特定的頭文件。

-D想象的那樣做同樣的事情:

#define XOPEN_SOURCE 500 
#define _BSD_SOURCE 1 

它正在編譯文件的頂部。

1

這些對於gcc來說並不算什麼。這些都是在你的.c,或的.cpp .h文件像類似的定義您有:

#define XOPEN_SOURCE 500 
#define _BSD_SOURCE 
1

-D是equlivant的#define

#define XOPEN_SOURCE 500