clang_complete: автозаполнение Vim для iOS - PullRequest
5 голосов
/ 20 октября 2011

Так что недавно я пытался настроить рабочий процесс iOS на основе Vim.

Я нашел clang_complete и установил параметры пользователя clang в моем .vimrc примерно так:* как описано здесь: http://www.zenskg.net/wordpress/?p=199#comment-229

и добавлено несколько путей framework / header / lib.Я не собираюсь публиковать всю строку, потому что она огромна.

Итак, я протестировал компиляцию одного из файлов в моем проекте, используя clang из командной строки (используя те же параметры), и он компилируется нормально, но только , если я используюфлаг -arch armv6/7.Если нет, он пытается скомпилировать для i386 и жалуется на отсутствие заголовочных файлов.

Пока все хорошо.Теперь я просто использую те же опции, которые я дал clang, пользовательским настройкам clang_complete в моем .vimrc верно?

Нет.Когда я делаю это и пытаюсь выполнить автозаполнение слова в Vim, в списке QuickFix Vim появляется слово

 unknown argument: '-arch' 

.Мне нужен этот флаг - как мне действовать?

Любые идеи полезны.Я бы хотел, чтобы в Vim работало завершение кода iOS.

Ответы [ 3 ]

3 голосов
/ 05 февраля 2012

По умолчанию clang_complete использует двоичный файл clang /usr/bin/clang, но Xcode - нет.Он использует библиотеку clang /Developer/usr/clang-ide/lib/libclang.dylib.Они не совсем одинаковые.Если вы копируете параметры, которые использует XCode, вы должны убедиться, что clang_complete также использует версию библиотеки.

Что-то подобное в вашем файле .vimrc должно сделать это:

filetype on
autocmd FileType objc let g:clang_use_library=1
autocmd FileType objc let g:clang_library_path='/Developer/usr/clang-ide/lib'

Когда я это делаю, -arch i386 принимается.

(PS - у меня была пара других проблем с получением clang_complete для разработки под iOS. Вы могли бы захотеть проверитьэта вилка: https://github.com/krisajenkins/clang_complete. Я слишком новичок, чтобы звонить, чтобы действительно знать, что я делаю, но это работает для меня ...)

3 голосов
/ 22 октября 2011

clang_complete запускает clang -cc1, что приводит к запуску внешнего интерфейса компилятора, а не драйвера. Интерфейс компилятора не понимает опцию -arch. clang -cc1 --help покажет вам возможные варианты. Вы, вероятно, должны указать -triple или один из -target-*.

Если вы не уверены, что использовать, вы можете запустить clang вручную, как и раньше, но в подробном режиме (-v). Таким образом, он напечатает командную строку clang -cc1, где вы можете найти соответствующие аргументы.

0 голосов
/ 26 мая 2012

Используя 5.1 SDK, я не смог получить -arch принятым даже при использовании libclang.dylib.

После некоторого futzing (а именно, вручную запустив команды clang, созданные xcodebuild с флагом -v, как предложено), моя лучшая установка была:

let g:clang_complete_auto = 1

"not strictly necessary
set omnifunc=ClangComplete

let g:clang_user_options='clang -cc1 -triple i386-apple-macosx10.6.7 -target-cpu yonah -target-linker-version 128.2 -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/3.1 -fblocks -x objective-c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -D __IPHONE_OS_VERSION_MIN_REQUIRED=50100 || exit 0'

добавление -cc1 - это единственное, что я не вижу в других ресурсах Stackoverflow или где-либо еще (очевидно, этот флаг позволяет использовать убогую комбинацию драйвера clang и необработанных флагов cc1). Как только это было добавлено, оно внезапно сработало, по крайней мере, для завершения Cocoa и UIKit (попробуйте набрать [NSString C-x C-u).

Тем не менее, что-то все еще слегка сломано.

Набрав :copen Я вижу это после завершения (успешно или нет):

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h|654 col 48 error| expected ';' after top level declarator

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUtilities.h|14 col 39 error| expected function body after function declarator
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h|60 col 32 info| expanded from macro 'CF_AVAILABLE_IOS'
/usr/include/Availability.h|145 col 53 info| expanded from macro '__OSX_AVAILABLE_STARTING'
<scratch space>|25 col 1 info| expanded from macro '__AVAILABILITY_INTERNAL'
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h|92 col 10 error| 'CoreFoundation/CFUserNotification.h' file not found

Кроме того, хотя я добавил различные -I флаги либо в мой файл .clang_complete, либо непосредственно в строку clang_user_option s, clang_complete работает только с некоторыми, но не со всеми заголовками в моем проекте. .. без видимой причины, почему один работает, но не другие. (Предложения приветствуются).

...