Фреймворки CMake MacOS не связаны должным образом? - PullRequest
0 голосов
/ 06 мая 2020

Использование CLion IDE и CMake для компиляции моего проекта с c ++ и парой классов target-c ++.

Моя проблема возникла, потому что мне нужно включить CoreFoundation в мой проект для моего класса в .mm файл для наследования от NSObject

После долгих поисков, я думаю, что нашел современный способ CMake для связывания фреймворков MacOS (CoreBluetooth, CoreFoundation и c) с cmake.

Код ниже представлен современный способ поиска и связывания фреймворков MacOS в моем файле Cmakelists.txt:

target_link_libraries(project_name PUBLIC stdc++ "-framework CoreBluetooth"
                                            "-framework Foundation"
                                            "-framework CoreFoundation"
    objc)

Загрузка cmake не вызывает никаких ошибок, но когда я пытаюсь import файлы (в любом из моих. cpp или файлы .mm) среда IDE сообщает, что не может найти библиотеки CoreBluetooth и Foundation.

Не уверен, упустил ли я что-нибудь действительно очевидное. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 07 мая 2020

Хорошо, пройдя несколько диких goose охотов и многоуровневых копаний, я наконец нашел решение. Я распечатал местоположение CoreFoundation, чтобы убедиться, что он был найден правильно и каталог исправен:

find_library(FoundationLib CoreFoundation)
message("LIB: ${FoundationLib}")

-> /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework Хорошо, я почти уверен, что загружается правильно. Теперь я покопался глубже, сломал свой код и обнаружил, что CLion принимает другие расширения, такие как .h ++ и .hm

.hm, действительно похоже на .h, и я знаю, что .m extension обозначает файл объектного c, так что это должно означать, что мне, вероятно, следует использовать .hm для представления заголовка объекта- c. Поэтому я переименовал свой заголовок в расширение .hm, и теперь он работает. Я думаю, что это специфика CLion c и нигде не было задокументировано.

резюме: на CLion переименуйте свой заголовок c из .h -> .hm

и если ваш заголовок является объективным заголовком C ++, измените его с .h -> .hmm

ЗАКЛЮЧИТЕЛЬНОЕ ЗАВЕРШЕНИЕ: я изменил файлы заголовков обратно с .hm и .hmm -> .h, и они все еще работают. Итак, окончательный ответ на мою проблему связан с CLion, вам нужно временно установить объективные заголовки С ++ на .hmm и .hm, а затем вернуть их на .h

...