我正在爲Mac OS編寫一個瀏覽器插件,它會在狀態欄中放置一個狀態欄圖標,用戶可以使用該圖標與瀏覽器插件進行交互。我已經在XCode 4.4.1中成功構建了FireBreath 1.6項目,並且可以將其安裝在瀏覽器中。然而,FireBreath使用C++,而大部分的Mac OS的現有的庫都寫在Objective C.如何將Objective C代碼添加到FireBreath項目?
在/Mac/projectDef.make文件,我添加了可可框架和基礎框架,提出here和在其他資源,我在網上查到:
target_link_libraries(${PROJECT_NAME}
${PLUGIN_INTERNAL_DEPS}
${Cocoa.framework} # added line
${Foundation.framework} # added line
)
我重新prepmac.sh,期待一個新的項目在Xcode中創建與我.mm文件和.m文件;但是,似乎他們被忽略了。我只看到.cpp和.h文件。我說對於那些在projectDef.make文件規則,但它似乎不有所作爲:
file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
Mac/[^.]*.cpp
Mac/[^.]*.h
Mac/[^.]*.m #added by me
Mac/[^.]*.mm #added by me
Mac/[^.]*.cmake
)
即使我加入手動文件,我得到了一系列的編譯錯誤。有關於他們的20,所有相關的文件NSObjRuntime.h
文件:
Parse Issue - Expected unqualified-id
Parse Issue - Unknown type name 'NSString'
Semantic Issue - Use of undeclared identifier 'NSString'
Parse Issue - Unknown type name 'NSString'
...
...
Semantic Issue - Use of undeclared identifier 'aSelectorName'
...
...
Semantic Issue - Use of undeclared identifier 'aClassName'
...
它繼續這樣一段時間,類似的錯誤...
從我讀過,這些錯誤出現,因爲我相信我已經包含在該項目中的Foundation Framework的依賴關係。我也嘗試點擊XCode中的項目
我到了現在的位置,我不知道接下來要嘗試什麼。人們說在C/C++代碼中使用Objective C並不困難,但對XCode和Objective C來說是新的可能會造成我的困惑。這對我來說只是第四天在這個新的平臺上。
我需要做什麼才能讓XCode編譯Objective C代碼?請記住,我對此有點新,所以如果您留下詳細的答案,而不是firebreath標籤中常見的模糊單行,我會很感激。我的頭腦裏有一點點,但如果你能讓我通過這個障礙,我肯定我會很開心。
UPDATE:
我編輯的項目/爲myplugin /的CMakeLists.txt,並在.M和.mm規則添加有太多。在運行prepmac.sh之後,這些文件包含在項目中,但我仍然收到相同的編譯錯誤。
我將所有.h文件和.mm文件從Obj C代碼移動到MyPlugin根文件夾並重新執行prepmac.sh文件。問題依然存在。相同的編譯錯誤。
所以如果我包含開源Objective C代碼,那麼我需要編輯每個頭文件?我讀了一些關於使用Prefix.pch文件作爲避免這種情況的方法,甚至在Objective C項目示例中看到了一個,但我還沒有弄清楚如何將它包含在FireBreath項目中。 +1,這一定會讓我走上正軌!感謝您抽出寶貴的時間與我們聯繫!你說得對! CMake是一種痛苦,但我可以看到它的必要性:) :) – jmort253
no no no。如果你包含開源的目標C代碼,你需要*不包括頭文件中的頭文件,這些頭文件也將包含在C++文件中。或者將#import包裝在#ifdef語句中以防止它被包含在cpp文件中 – taxilian
好吧,我認爲現在開始有意義。我離開了Mac工作,所以我會在星期一嘗試一下。再次感謝! :) – jmort253