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

并添加了一些框架/头文件/库路径。我不会发布整条线,因为它很大。

clang因此,我使用命令行(使用相同的选项)测试了项目中文件之一的编译,它编译得很好,但前提是我使用了-arch armv6/7标志。如果我不这样做,它会尝试为 i386 编译并抱怨缺少头文件。

到目前为止,一切都很好。现在我只是使用我给的完全相同的选项clang, toclang_complete的用户选项在我的.vimrc权利?

没有。当我这样做并尝试在 Vim 中自动完成一个单词时,它说

 unknown argument: '-arch' 

在 Vim 的 QuickFix 列表中。我有点需要这个标志——我应该怎么做?

任何有用的想法。我很想在 Vim 下完成 iOS 代码完成。

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被接受。

(PS - 我在让 clang_complete 为 iOS 开发工作时遇到了其他一些问题。你可能想看看这个 fork: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'

添加-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_options 字符串,clang_complete也仅适用于我的项目中的一些但不是所有标题......没有明显的原因为什么一个有效而其他标题无效。(欢迎提出建议)。

于 2012-05-26T04:12:53.807 回答