2011-11-09 88 views
3

作爲最近我問到的another question的後續問題,我意識到我的問題是我不知道如何在Eclipse CDT項目屬性中包含Apple'框架',以便它們'在編譯時被拾取並鏈接。如何在Eclipse上包含Apple'框架'CDT

這導致包括這種形式不被解決:

#include <OpenCL/cl.h> 

凡實際路徑會是這樣的:

/System/Library/Frameworks/OpenCL.framework/Versions/A/Headers 

而CMD線的選擇是(如果我是手動編譯):

-framework OpenCL 

總結:我怎樣才能獲得的Eclipse看到我想從他的項目屬性框架(S)?

任何幫助高度讚賞!

+0

您可以編輯的工具鏈,並添加框架頭和lib目錄? – trojanfoe

+0

我是一個總的noob與eclipse cdt - 我該怎麼做?我在proj屬性中看到了一個工具鏈編輯器,但是我看不到如何從那裏添加那些東西 – JohnIdol

+0

嘗試項目屬性> C/C++常規>路徑和符號。 – trojanfoe

回答

7

JohnIdol答案的替代答案。特別是,可以在案件工作的方法,你不想改變<OpenCL/cl.h>參考<cl.h>

首先,我來到了現場與正是考慮這個問題(如何將蘋果的框架'在Eclipse CDT(C/C++)項目中),我非常欣賞這個討論 - 它給了我一個起點。

John的答案很酷,但確實涉及到如何調用包含文件(例如,代碼中的<OpenCL/cl.h>變爲<cl.h>)。然後他在eclipse屬性中爲他需要的每個Header目錄做一個直接的include-path引用。

在我的情況下,我已經檢查了GNU步步高來玩弄源代碼。此代碼編譯(有一些器官功能障礙綜合徵LDFLAGS和CPPFLAGS做autogen.sh之前)上使用-framework選項的我猜標準蘋果的做法OS X的CLI環境,並與包括像 #include <CoreAudio/CoreAudioTypes.h>

文件的引用我可能永遠實際上承諾任何東西,但我不想開始使用標準方法來編譯已經編譯好的代碼中的#includes。所以我做了以下工作:

  1. 在我的工作空間gnubg中創建了一個名爲「Frameworks」的新目錄。
  2. 在該目錄中,創建頭文件目錄的軟鏈接。

    ln -s /System/Library/Frameworks/CoreAudio.framework/Headers CoreAudio 
    
  3. 在gnubg項目屬性> C/C++常規>路徑和符號,加入/gnubg/Frameworks到包含目錄(作爲工作空間路徑)。無論我製作的軟鏈接數量多少,我只需要做一次。

這樣我根本不必更改代碼,Eclipse很開心,CLI編譯也很開心。

我注意到,如果在框架中使用某些目錄(如CoreServices.framework),則會出現輕微的皺摺。在這些情況下,Frameworks子目錄和某些包含文件中的相對路徑引用(例如,..)與其他包含文件相關。所以在這種情況下,我不得不修改一下程序。基本上,我不得不在Frameworks中爲CoreServices.framework添加一個額外的子目錄,然後在該目錄中我必須添加兩個軟鏈接。一個用於CoreServices(用於Headers),另一個用於Framework子目錄。

lrwxr-xr-x 1 dhansen staff 57B Jul 27 02:06 CoreServices -> /System/Library/Frameworks/CoreServices.framework/Headers 
lrwxr-xr-x 1 dhansen staff 60B Jul 27 02:05 Frameworks -> /System/Library/Frameworks/CoreServices.framework/Frameworks 

然後我不得不添加/gnubg/Frameworks/CoreServices.framework到包括路徑(上面的步驟3)。
就是這樣。不再包含文件問題。

0

行,所以我必須包括這樣的:

#include <cl.h> 

然後添加一個包括與在屬性> C/C++常規>路徑和導致編譯器下面的選項符號的頭文件的文件夾:

-I/System/Library/Frameworks/OpenCL.framework/Versions/A/Headers 

而且,最值得注意的是,必須添加下列選項下屬性> C/C++庫的路徑和框架納入++生成>設置:

-L/System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries -framework OpenCL 

上述做法。

1

由於當前的Eclipse CDT版本不能正確執行子框架頭包含,因此可以通過創建符合每個子框架包含目錄的符號鏈接來避免子框架問題(如由CoreServices頭文件生成的問題) 。我闡述了這個問題,它從danhan答案莖,在下面的帖子:

http://thegreyblog.blogspot.com/2014/02/how-to-include-apple-frameworks-headers.html

爲了自動化這個過程中,我創建了一個的Z shell腳本自動執行此過程,並創建符號鏈接到指定的框架的頭文件目錄,以及指向每個子框架的include目錄的鏈接。腳本可以在這裏找到:https://github.com/emcrisostomo/link-osx-framework-headers

希望這會有所幫助。

0

轉到您的項目>屬性> MacOS X的C++鏈接>命令 ,那裏 「g ++」 添加 「-framework OpenCL的」