天天看點

eclipse cdt 搭建 c/c++ 開發環境的總結

一口氣轉了很多篇文章,本來最近事情很忙,

是準備将在 eclipse 中搭建 c/C++ 開發環境的事情放在後面的,

無奈還是沒忍住,今天一不小心就把這事兒給辦了~

eclipse 是如此之優秀,我簡直深陷其中無法自拔,

現在,java,actionScript,c/C++,python 這些程式設計語言我都能夠在eclipse中進行開發了。

現在的心情,毫無疑問是非常之舒暢的。

至于 objective-c,還是在 Xcode 裡面老老實實地呆着吧,

XCode 其實也很不錯,和 eclipse 可謂是不遑多讓,

隻不過在相容多門程式設計語言方面做的不是很好。

以前的 XCode 好像是可以支援 c/c++,java 等語言的吧(現在貌似也支援c/C++)~

現在的 XCode 經過了閹割,安裝包的大小由 3。多G變成了現在的1。6G,

功能上自然是削減了不少。功能是為什麼會做縮減,猜不透蘋果的想法.

不過 XCode 依然能用來進行 objective-c 的書寫,也算是徹底回歸了老本行,

讓人有一種回歸本質的感覺,其實 c/c++,java等還是n多的ide可以選擇的。。。

今天弄 eclipse cdt 花了我很長的時間。

倒不是說下載下傳帶 cdt 的 eclipse 版本要花費多長的時間,100多MB而已,

雖然我網速不行,不過還是沒用多久就給下載下傳完畢了。

我本機裡面之前已經有一個 eclipse了,也是 helios的,

後面覺得兩個 eclipse 有點兒雞肋,就直接在之前一直使用的 eclipse 裡面安裝了 cdt 的功能更新。

這樣做了以後,便算作是将好幾種程式設計語言的開發環境都集中到了之前一直使用的那個 eclipse裡面。

感覺還是相當不錯,換不同的語言做開發,簡單的切換一些 ide視圖就可以了。

如果覺得各個不同語言的項目混雜在 workspace 裡面,還可以為各個不同的語言建立一個獨立的workspace,

使用的時候,随意去切換一下便行了,總之,用起來比較方面咯~

不過,在弄 cdt 的時候也是遇到了不少細碎的問題,其中的一兩個問題甚至花費了我大把的時間,

寫這篇博文的目的也是将其間遇到的各種蛋疼的問題給記錄下來,給今後一個參考~

恩,其實一些比較簡單的問題在之前轉載的一些文章中都已經有所展現了。

思忖再三,還是将最最棘手,坑了我n多時間的這個大頭給亮出來曬曬:

最主要的問題便是,我若建立了一個項目,這個項目的構成類似于 Box2D 的 Testbed,

該如何将 glui,glut,box2d 這些輕量級複用架構的源碼子產品組織到我的項目中來呢?

這個我問題我在網上搜了很久,沒有找到最契合我需求的答案,

可能還是因為 eclipse cdt 用的不是很廣泛,或者是用cdt 弄開發的都太過低調,沒有留下多少有價值的文字記錄。

閑話不多說,也不賣關子,直接撿最最重要的一些東西羅列下來:

1。右鍵點選項目-》屬性(command+i)-》“C/C++ build” -> Settings->ToolSettings->

GCC C++ Compiler -> Includes:

eclipse cdt 搭建 c/c++ 開發環境的總結

"${workspace_loc:/TestBox2D/libs}"

上面這個字元串是浏覽選取項目中的 libs 目錄後自動生成的。

類似于 EL 表達式,意思也很明了,就是說編譯器在編譯的過程中會檢索這個目錄下面的 。h 頭檔案。

其實,經過我的測試,C/C++ Build 中的這個設定

和  C/C++ General->Paths and Symbols->Includes->GNU C++ 中的設定是相關聯的~

将下圖中 includes->include directories 中的 /TestBox2D/libs 去掉之後,

之前那張圖中的 "${workspace_loc:/TestBox2D/libs}" 也會被同時抹除掉。

反之,将之前哪張圖中的 "${workspace_loc:/TestBox2D/libs}" 去掉之後,

後面所說的那個位置的那行以紫色圖示開頭的 “/TestBox2D/libs” 條目也會被抹除掉。

是以,上面所談及的兩者是息息相關、相依相存的。

參照下面貼出的這張圖來對我所闡述的意思進行正确的了解:

eclipse cdt 搭建 c/c++ 開發環境的總結

至此,将項目clean一下,之前所報出的找不到 Box2D.h 頭檔案

或找不到 b2World.h、b2Body.h 等其他屬于 box2d 源碼子產品 頭檔案的編譯錯誤就不會再出現了~

不過問題還是沒有解決。下面将會遇到一個新的編譯錯誤,那就是:

在 main.o 對象檔案中找不到 b2World,b2Body 的定義

(main.o 包含了 main 方法,.o 檔案是 cpp 檔案編譯後生成的檔案類型)。

這個問題我在網上查了下,很快邊找到了原因所在:

那是因為,前面的操作僅僅是讓編譯器知道了 box2d 源碼子產品頭檔案的位置,

至于這些頭檔案的具體 .cpp 實作,雖然是和頭檔案放在一起的,但實際上是不會被編譯的。

據我猜測,隻有被歸類為代碼源檔案的目錄,其中的 cpp 檔案才會編譯到。

這點并非我信口胡謅,因為我在控制台下面确實沒有看到有 b2Body.o , b2World.o 等檔案被編譯出來。

這個便足以說明問題:box2d 的 cpp 源檔案沒有參與編譯過程。

問題既然已經找到,那麼解決辦法也是信手拈來了:

将box2d 源碼子產品所在的根目錄劃歸為 “源代碼檔案夾” 即可!

eclipse cdt 搭建 c/c++ 開發環境的總結

下面是項目的目錄結構以及使用到 box2d 實體引擎的程式順利執行的截圖~

eclipse cdt 搭建 c/c++ 開發環境的總結

總的來說,這次花費了那麼多冤枉時間主要還是因為對 C/C++ 的

#include <Box2d/b2Body.h> 這行預處理指令了解的不是很透徹,或者說是以前了解了,但是很久沒用又給忘了。

#include <abc/def/fuck.h>  和  #include “test.h” 的含義是不一樣的,這點衆可以去問 google 大神,

時間過太久,我也隻是退化到隻能意會不能言傳的地步了,說的不對怕誤導了别人。

恩,不說這些喪氣事兒了。談一談 eclipse cdt 的感官體驗吧:

對比于  XCode 編譯 objecive-c 與 c/C++ 混編的項目,個人感覺還是 XCode 的編譯效率要高一點。

給我的感覺就是,eclipse cdt 僅僅編譯一個 box2d 源碼子產品就讓我等的有點兒心煩了。

說到這點上面,蘋果現在已經展開硬翅膀準備脫離 GCC(GNU Compile Collecion )了,

蘋果弄了一個 llvm。llvm與GCC 的差別我不是很清楚,但是我知道的是,

總有一天等到時間成熟了,apple 會将 llvm-gcc 編譯組過渡為純粹的 llvm。

一年以前在深圳的時候,那時候我用的是 windows,我還清楚的記得,

我看到 GCC 号稱能編譯 N 中程式設計語言那時候自己臉上興奮的表情,

down 了不知道多久(GCC 很大的),終于是把一整套 GCC 給搞到自己電腦裡面來了。

其實後面也沒怎麼用到,就用了g++,gcc 編譯了一些 c/C++ 源檔案,

其他的程式語言都沒怎麼去涉及到。後面又一次電腦出問題了,ok,還原之後什麼都沒了- -、

現在用的是 Mac ,基于 Unix 的變種,非常非常優秀,适合做科研的系統,

不再是操蛋的 windows,給我的驚喜就是 :

Mac 内置了 python, java, Gcc, 以及蘋果自己推出的 LLVM 編譯工具集。

在 Mac 上面,原來在 windows 上面要通過 n 久的下載下傳才能獲得的開發環境,

Mac 就直接給内置上了,從這點來看,不得不說 Mac 做的 比 windows 要好太多了。

有人說 Mac 操作簡單,用多了就傻了,

其實隻要稍微有進取心一點,mac 是比 windows 要更加适合用來做程式開發、用來學習作業系統的。

純屬個人看法,憤怒者果斷來拍磚,收工~

轉載于:https://www.cnblogs.com/yang3wei/archive/2012/06/01/2739715.html