5

そこで最近、VimベースのiOSワークフローを設定しようとしています。

clang_completeを見つけ、.vimrcでclangユーザーオプションを次のように設定しました

let g:clang_user_options='-fblocks -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -D__IPHONE_OS_VERSION_MIN_REQUIRED=40300'

ここで説明されているように:http ://www.zenskg.net/wordpress/?p = 199#comment-229

そして、いくつかのフレームワーク/ヘッダー/libパスを追加しました。巨大なので、全行を投稿するつもりはありません。

そこでclang、コマンドラインから(同じオプションを使用して)プロジェクト内のファイルの1つをコンパイルすることをテストしましたが、フラグを使用した場合にのみ正常にコンパイルされます。-arch armv6/7そうしないと、i386用にコンパイルしようとし、ヘッダーファイルが見つからないと文句を言います。

ここまでは順調ですね。今、私は自分が与えたのとまったく同じオプションをclang、私の右側clang_completeのユーザーオプションに使用していますか?.vimrc

いいえ。それをしてVimで単語をオートコンプリートしようとすると、

 unknown argument: '-arch' 

VimのQuickFixリストにあります。私はちょっとこの旗が必要です-どうすればいいですか?

役に立つアイデア。iOSコード補完をVimで動作させたいです。

4

3 に答える 3

3

clang_completeが実行されますclang -cc1。これにより、コンパイラのフロントエンドが実行され、ドライバは実行されません。-archコンパイラのフロントエンドはオプションを理解していません。clang -cc1 --help可能なオプションが表示されます。おそらく、-tripleまたはのいずれかを指定する必要があります-target-*

何を使用すればよいかわからない場合は、手動でclangを実行できますが、冗長モード(-v)で実行できます。このようにしてclang -cc1、適切な引数を見つけることができるコマンドラインを出力します。

于 2011-10-22T12:52:46.567 に答える
3

デフォルトでは、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受け入れられます。

(追記-iOS開発でclang_completeを機能させる上で他にもいくつか問題がありました。このフォークをチェックしてみてください:https ://github.com/krisajenkins/clang_complete 。私はclangに慣れていないので、実際に何を知ることができません。私はやっていますが、それは私のために働いています...)

于 2012-02-04T23:18:31.760 に答える
0

5.1 SDKを使用すると、libclang.dylibを使用している場合でも-archを受け入れることができませんでした。

いくつかの手間をかけた後(つまり、提案されたフラグを使用してxcodebuildによって生成されたclangコマンドを手動で実行した後-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'

Stackoverflowや他の場所の他のリソースで言及されていないのは追加-cc1だけです(このフラグにより​​、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

また、ファイルまたは直接s文字列にさまざまな-Iフラグを追加しましたが、プロジェクトのすべてではなく一部のヘッダーでのみ機能します... 1つが機能し、他のヘッダーが機能しない明確な理由はありません。(提案を歓迎します)。.clang_completeclang_user_optionclang_complete

于 2012-05-26T04:12:53.807 に答える