要獲取更多有關(guān)在 NetBeans IDE 中使用 C/C++ 應(yīng)用程序的信息,請(qǐng)參見 NetBeans 網(wǎng)站上的 C/C++ 應(yīng)用程序?qū)W習(xí)課程頁。
教程需求
在繼續(xù)前,請(qǐng)確保您重新檢查了本節(jié)中的需求。
先決條件
本教程假設(shè)您已經(jīng)有一些 C 和 C++ 的編程經(jīng)驗(yàn)。
本教程所需的軟件
在開始前,您需要安裝 NetBeans 6.0。C/C++ 下載選項(xiàng)包括 NetBeans IDE 6.0 和 C/C++ 支持。
問題是什么?
IDE 的一項(xiàng)職責(zé)就是代碼模型的構(gòu)建。代碼模性對(duì) IDE 功能很重要,例如:
代碼完成
超鏈接
導(dǎo)航
為了正確生成模型,IDE 需要關(guān)于項(xiàng)目的信息,例如:
編譯的文件
使用哪個(gè)編譯器
用戶包含路徑和每個(gè)編譯的文件中的宏
使用的頭文件
沒有這些信息,IDE 無法生成恰當(dāng)?shù)哪P停@將造成 IDE 的功能工作出錯(cuò)。
當(dāng)然,所有這些信息都包含在 makefile 里。問題是由于以下原因,難以判斷出必要的信息:
復(fù)雜的開源項(xiàng)目通常有一個(gè)層次文件結(jié)構(gòu),主 makefile 引用了子目錄下的 makefile。
Makefile 常常使用外殼腳本命令。
有時(shí)候 make 實(shí)用工具的行為取決于它前面的操作;例如,基于前一步中所創(chuàng)建的文件的存在性。
Netbeans IDE 提供了另一種方法來獲取模型的必要信息,它基于使用下列文件中的編譯器注釋或調(diào)試信息:
對(duì)象文件
靜態(tài)或動(dòng)態(tài)庫
可執(zhí)行文件
如果工作的?
讓我們檢查在為某個(gè)開源應(yīng)用程序新建 Netbeans IDE 項(xiàng)目時(shí)的典型情況。
這種情況始于開始下載某個(gè)開源項(xiàng)目。我們使用 MySQL 項(xiàng)目。以下指令都假設(shè)我們已經(jīng)載入了該開源項(xiàng)目并安裝了必要的軟件?,F(xiàn)在我們來配置這個(gè)項(xiàng)目。
要保證編譯器注釋的完整,我們提供附加的編譯標(biāo)志:
./configure CFLAGS="-g3 -gdwarf-2" CXXFLAGS="-g3 -gdwarf-2"
這些標(biāo)志有什么用?
我相信 -g 標(biāo)志廣為人知。該標(biāo)志告訴編譯器在對(duì)象文件中包括調(diào)試信息。該標(biāo)志的 -g3 變體使調(diào)試信息更完整。該標(biāo)志使得能夠獲取用戶宏的信息。
-gdwarf-2 標(biāo)志告訴編譯器使用版本 2 的 DWARF 調(diào)試信息格式。
我們用 make 命令生成應(yīng)用程序?;緛碚f,我們必須確保應(yīng)用程序用以上提到的標(biāo)志來編譯。
怎樣告訴 make 實(shí)用工具去使用必要的標(biāo)志取決于特定的開源項(xiàng)目。有時(shí)候有必要導(dǎo)出環(huán)境變量:
export CFLAGS="-g3 -gdwarf-2"
export CXXFLAGS="-g3 -gdwarf-2"
對(duì)于不靈活的項(xiàng)目,有必要查看 makefile 的內(nèi)容,以便了解怎樣提供標(biāo)志。
現(xiàn)在我們的開源項(xiàng)目已經(jīng)成功生成。所以能夠創(chuàng)建一個(gè) NetBeans IDE 項(xiàng)目。
啟動(dòng) NetBeans IDE。
通過選擇“文件”>“新建項(xiàng)目”>“C/C++”>“基于現(xiàn)有代碼的 C/C++ 項(xiàng)目”來新建一個(gè)項(xiàng)目。
讓我們來看看“新建項(xiàng)目”向?qū)У牟襟E。
在第二步的“生成工具”頁,我們必須指明開源項(xiàng)目的主 makefile 的位置。指向正確的 makefile,才能從 IDE 生成應(yīng)用程序。
第三步值得額外注意。在“生成操作”頁,您可以指定應(yīng)用程序的可執(zhí)行文件(生成結(jié)果)的位置,這使得能夠從 IDE 中啟動(dòng)應(yīng)用程序。您可以稍后填寫該字段。
在第五步的“代碼幫助配置”頁,向?qū)?huì)根據(jù)編譯器注釋,建議自動(dòng)建立 IDE 項(xiàng)目。讓我們看看這里面發(fā)生了什么。如果在第三步,您指定了生成結(jié)果的位置,向?qū)Ь褪褂脕碜陨山Y(jié)果的編譯器注釋。否則,向?qū)⑹褂脕碜蚤_源項(xiàng)目文件夾中的所有對(duì)象文件、庫和可執(zhí)行文件中的編譯器注釋。向?qū)褂脧倪@些文件中獲取的信息來建立 IDE 項(xiàng)目。
配置級(jí)別告訴向?qū)г鯓咏y(tǒng)合發(fā)現(xiàn)的用戶包含目錄和宏。對(duì)于每個(gè)編譯的文件,編譯器注釋都包含用戶包含目錄和宏。但是為了 IDE 項(xiàng)目在以后維護(hù)的方便,也可以設(shè)置另外的配置級(jí)別。例如,如果您選擇項(xiàng)目級(jí)別配置,那么所有的用戶包含目錄和宏將統(tǒng)合到項(xiàng)目屬性中。
在后一步,選擇 IDE 項(xiàng)目的位置。缺省情況下,IDE 建議把項(xiàng)目放到您的主目錄下,這樣就能完全分離 IDE 項(xiàng)目和開源項(xiàng)目。由于版本控制系統(tǒng),有時(shí)候這種分離很有用。但您完全可以使用開源項(xiàng)目本身中的一個(gè)文件夾。IDE 把關(guān)于 IDE 項(xiàng)目的所有信息放到一個(gè)叫做 nbproject. 的特殊文件夾里。
在 NetBeans IDE 項(xiàng)目創(chuàng)建的結(jié)尾,向?qū)⒃谀P椭兄话ㄒ丫幾g的文件或被已編譯的文件包含的文件。未使用的文件將被標(biāo)為從代碼幫助中排除。每個(gè)編譯的文件都有正確的用戶包含路徑和宏。
后是幾個(gè)問題的解答
怎樣編輯用戶包含目錄和宏?
在項(xiàng)目的屬性、邏輯文件夾或文件(“屬性”>“代碼幫助”>“C 編譯器”>“常規(guī)”,或者“屬性”>“代碼幫助”>“C++ 編譯器”>“常規(guī)”)中。值得注意的是,屬性可以從項(xiàng)目和文件所在的邏輯文件夾繼承。文件具有 C 編譯器或者 C++ 編譯器的屬性,這取決于文件的擴(kuò)展名。項(xiàng)目和文件夾具有 C 編譯器和 C++ 編譯器的屬性。
怎樣檢測(cè)出 IDE 項(xiàng)目的配置是錯(cuò)的?
通常此類 IDE 項(xiàng)目有未解析的包含目錄。這些都顯示在項(xiàng)目窗口中,并在項(xiàng)目節(jié)點(diǎn)的右上角用一個(gè)藍(lán)背景的小問號(hào)標(biāo)記。您可以查看未解析的引用目錄列表,方法是右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“代碼幫助”>“顯示失敗的 #include 目錄”。
可以配置一個(gè)現(xiàn)已存在的 IDE 項(xiàng)目嗎?
可以。首先,用上面提到的必要標(biāo)志生成開源項(xiàng)目。然后右鍵單擊項(xiàng)目節(jié)點(diǎn),選擇“代碼幫助”>“配置代碼幫助”?!芭渲么a幫助”向?qū)б詢煞N模式工作:簡(jiǎn)易和高級(jí)。
簡(jiǎn)易模式重復(fù)新建項(xiàng)目向?qū)У牟僮鳌?BR> 高級(jí)模式讓您選擇獲取編譯器注釋的不同方法,并具有一個(gè)分析結(jié)果的預(yù)覽。
有可能讓一個(gè) IDE 項(xiàng)目具備不同平臺(tái)/設(shè)備相關(guān)的配置嗎?
可以。您可以在項(xiàng)目屬性中管理配置。對(duì)每個(gè)配置,您都可以啟動(dòng)“配置代碼幫助”向?qū)?。在向?qū)е兄付ú煌脚_(tái)/設(shè)備的生成結(jié)果。向?qū)⒃O(shè)置當(dāng)前的活動(dòng)配置。
教程需求
在繼續(xù)前,請(qǐng)確保您重新檢查了本節(jié)中的需求。
先決條件
本教程假設(shè)您已經(jīng)有一些 C 和 C++ 的編程經(jīng)驗(yàn)。
本教程所需的軟件
在開始前,您需要安裝 NetBeans 6.0。C/C++ 下載選項(xiàng)包括 NetBeans IDE 6.0 和 C/C++ 支持。
問題是什么?
IDE 的一項(xiàng)職責(zé)就是代碼模型的構(gòu)建。代碼模性對(duì) IDE 功能很重要,例如:
代碼完成
超鏈接
導(dǎo)航
為了正確生成模型,IDE 需要關(guān)于項(xiàng)目的信息,例如:
編譯的文件
使用哪個(gè)編譯器
用戶包含路徑和每個(gè)編譯的文件中的宏
使用的頭文件
沒有這些信息,IDE 無法生成恰當(dāng)?shù)哪P停@將造成 IDE 的功能工作出錯(cuò)。
當(dāng)然,所有這些信息都包含在 makefile 里。問題是由于以下原因,難以判斷出必要的信息:
復(fù)雜的開源項(xiàng)目通常有一個(gè)層次文件結(jié)構(gòu),主 makefile 引用了子目錄下的 makefile。
Makefile 常常使用外殼腳本命令。
有時(shí)候 make 實(shí)用工具的行為取決于它前面的操作;例如,基于前一步中所創(chuàng)建的文件的存在性。
Netbeans IDE 提供了另一種方法來獲取模型的必要信息,它基于使用下列文件中的編譯器注釋或調(diào)試信息:
對(duì)象文件
靜態(tài)或動(dòng)態(tài)庫
可執(zhí)行文件
如果工作的?
讓我們檢查在為某個(gè)開源應(yīng)用程序新建 Netbeans IDE 項(xiàng)目時(shí)的典型情況。
這種情況始于開始下載某個(gè)開源項(xiàng)目。我們使用 MySQL 項(xiàng)目。以下指令都假設(shè)我們已經(jīng)載入了該開源項(xiàng)目并安裝了必要的軟件?,F(xiàn)在我們來配置這個(gè)項(xiàng)目。
要保證編譯器注釋的完整,我們提供附加的編譯標(biāo)志:
./configure CFLAGS="-g3 -gdwarf-2" CXXFLAGS="-g3 -gdwarf-2"
這些標(biāo)志有什么用?
我相信 -g 標(biāo)志廣為人知。該標(biāo)志告訴編譯器在對(duì)象文件中包括調(diào)試信息。該標(biāo)志的 -g3 變體使調(diào)試信息更完整。該標(biāo)志使得能夠獲取用戶宏的信息。
-gdwarf-2 標(biāo)志告訴編譯器使用版本 2 的 DWARF 調(diào)試信息格式。
我們用 make 命令生成應(yīng)用程序?;緛碚f,我們必須確保應(yīng)用程序用以上提到的標(biāo)志來編譯。
怎樣告訴 make 實(shí)用工具去使用必要的標(biāo)志取決于特定的開源項(xiàng)目。有時(shí)候有必要導(dǎo)出環(huán)境變量:
export CFLAGS="-g3 -gdwarf-2"
export CXXFLAGS="-g3 -gdwarf-2"
對(duì)于不靈活的項(xiàng)目,有必要查看 makefile 的內(nèi)容,以便了解怎樣提供標(biāo)志。
現(xiàn)在我們的開源項(xiàng)目已經(jīng)成功生成。所以能夠創(chuàng)建一個(gè) NetBeans IDE 項(xiàng)目。
啟動(dòng) NetBeans IDE。
通過選擇“文件”>“新建項(xiàng)目”>“C/C++”>“基于現(xiàn)有代碼的 C/C++ 項(xiàng)目”來新建一個(gè)項(xiàng)目。
讓我們來看看“新建項(xiàng)目”向?qū)У牟襟E。
在第二步的“生成工具”頁,我們必須指明開源項(xiàng)目的主 makefile 的位置。指向正確的 makefile,才能從 IDE 生成應(yīng)用程序。
第三步值得額外注意。在“生成操作”頁,您可以指定應(yīng)用程序的可執(zhí)行文件(生成結(jié)果)的位置,這使得能夠從 IDE 中啟動(dòng)應(yīng)用程序。您可以稍后填寫該字段。
在第五步的“代碼幫助配置”頁,向?qū)?huì)根據(jù)編譯器注釋,建議自動(dòng)建立 IDE 項(xiàng)目。讓我們看看這里面發(fā)生了什么。如果在第三步,您指定了生成結(jié)果的位置,向?qū)Ь褪褂脕碜陨山Y(jié)果的編譯器注釋。否則,向?qū)⑹褂脕碜蚤_源項(xiàng)目文件夾中的所有對(duì)象文件、庫和可執(zhí)行文件中的編譯器注釋。向?qū)褂脧倪@些文件中獲取的信息來建立 IDE 項(xiàng)目。
配置級(jí)別告訴向?qū)г鯓咏y(tǒng)合發(fā)現(xiàn)的用戶包含目錄和宏。對(duì)于每個(gè)編譯的文件,編譯器注釋都包含用戶包含目錄和宏。但是為了 IDE 項(xiàng)目在以后維護(hù)的方便,也可以設(shè)置另外的配置級(jí)別。例如,如果您選擇項(xiàng)目級(jí)別配置,那么所有的用戶包含目錄和宏將統(tǒng)合到項(xiàng)目屬性中。
在后一步,選擇 IDE 項(xiàng)目的位置。缺省情況下,IDE 建議把項(xiàng)目放到您的主目錄下,這樣就能完全分離 IDE 項(xiàng)目和開源項(xiàng)目。由于版本控制系統(tǒng),有時(shí)候這種分離很有用。但您完全可以使用開源項(xiàng)目本身中的一個(gè)文件夾。IDE 把關(guān)于 IDE 項(xiàng)目的所有信息放到一個(gè)叫做 nbproject. 的特殊文件夾里。
在 NetBeans IDE 項(xiàng)目創(chuàng)建的結(jié)尾,向?qū)⒃谀P椭兄话ㄒ丫幾g的文件或被已編譯的文件包含的文件。未使用的文件將被標(biāo)為從代碼幫助中排除。每個(gè)編譯的文件都有正確的用戶包含路徑和宏。
后是幾個(gè)問題的解答
怎樣編輯用戶包含目錄和宏?
在項(xiàng)目的屬性、邏輯文件夾或文件(“屬性”>“代碼幫助”>“C 編譯器”>“常規(guī)”,或者“屬性”>“代碼幫助”>“C++ 編譯器”>“常規(guī)”)中。值得注意的是,屬性可以從項(xiàng)目和文件所在的邏輯文件夾繼承。文件具有 C 編譯器或者 C++ 編譯器的屬性,這取決于文件的擴(kuò)展名。項(xiàng)目和文件夾具有 C 編譯器和 C++ 編譯器的屬性。
怎樣檢測(cè)出 IDE 項(xiàng)目的配置是錯(cuò)的?
通常此類 IDE 項(xiàng)目有未解析的包含目錄。這些都顯示在項(xiàng)目窗口中,并在項(xiàng)目節(jié)點(diǎn)的右上角用一個(gè)藍(lán)背景的小問號(hào)標(biāo)記。您可以查看未解析的引用目錄列表,方法是右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“代碼幫助”>“顯示失敗的 #include 目錄”。
可以配置一個(gè)現(xiàn)已存在的 IDE 項(xiàng)目嗎?
可以。首先,用上面提到的必要標(biāo)志生成開源項(xiàng)目。然后右鍵單擊項(xiàng)目節(jié)點(diǎn),選擇“代碼幫助”>“配置代碼幫助”?!芭渲么a幫助”向?qū)б詢煞N模式工作:簡(jiǎn)易和高級(jí)。
簡(jiǎn)易模式重復(fù)新建項(xiàng)目向?qū)У牟僮鳌?BR> 高級(jí)模式讓您選擇獲取編譯器注釋的不同方法,并具有一個(gè)分析結(jié)果的預(yù)覽。
有可能讓一個(gè) IDE 項(xiàng)目具備不同平臺(tái)/設(shè)備相關(guān)的配置嗎?
可以。您可以在項(xiàng)目屬性中管理配置。對(duì)每個(gè)配置,您都可以啟動(dòng)“配置代碼幫助”向?qū)?。在向?qū)е兄付ú煌脚_(tái)/設(shè)備的生成結(jié)果。向?qū)⒃O(shè)置當(dāng)前的活動(dòng)配置。

