Как добавить код Objective C в проект FireBreath?

Я пишу плагин для браузера для Mac OS, который будет помещать значок строки состояния в строке состояния, который пользователи могут использовать для взаимодействия с плагином браузера. Я успешно построил проект FireBreath 1.6 в XCode 4.4.1 и могу установить его в браузере. Однако FireBreath использует C ++, тогда как подавляющее большинство существующих библиотек для Mac OS написаны на Objective C.

В файле /Mac/projectDef.make я добавил Cocoa Framework и Foundation Framework, как было предложено Вот и в других ресурсах, которые я нашел в Интернете:

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

Я дошел до того, что сейчас не уверен, что попробовать дальше. Люди говорят, что использовать Objective C в коде C / C ++ несложно, но, будучи новичком в XCode и Objective C, я могу запутаться. Это только 4-й день для меня на этой новой платформе.

Что мне нужно сделать, чтобы XCode компилировал код Objective C? Пожалуйста, помните, что я немного новичок в этом, поэтому я был бы признателен, если вы оставите подробные ответы, а не расплывчатые строки, которые часто встречаются в тег. Я просто немного над головой, но если ты сможешь преодолеть это препятствие, я уверен, что мне будет хорошо идти оттуда.

ОБНОВИТЬ:

Я отредактировал проекты / MyPlugin / CMakeLists.txt и добавил туда также правила .m и .mm. после запуска prepmac.sh файлы включаются в проект, но я по-прежнему получаю те же ошибки компиляции.

Я переместил все файлы .h и .mm из кода Obj C в корневую папку MyPlugin и перезапустил файл prepmac.sh. Проблема все еще существует. Те же ошибки компиляции.

4

Решение

Ваша проблема в том, что у вас есть файлы .h, которые включаются в файлы C ++ с целевым типом c и / или включаются в них. Чтобы сделать то, что вы хотите, все ваши классы, используемые c ++, должны либо хранить все связанные с объектами вещи в #ifdef, либо просто не предоставлять ничего obj c в заголовочном файле.

Например, вы можете использовать этот ifdef в своем заголовке:

#ifdef __OBJC__
// Objective C / C++ code here
#endif

Важно помнить, что .h файлы включает в себя а также заголовочные файлы, так что они на самом деле включены. Если вы включаете объективный код c в файл .cpp, компилятор запутывается и плачет.


РЕДАКТИРОВАТЬ: Самое важное, что нужно помнить, это то, что вам нужно убедиться, что любые файлы заголовков c (или другие файлы с кодом c) не включены в файлы cpp. Если вы можете сделать это, вы будете в порядке.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]