所以最近我一直试图建立一个基于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
测试了我项目中某个文件的编译(使用相同的选项),并且它编译得很好,但是如果我使用的话只能 -arch armv6/7
标志。如果我不这样做,它会尝试编译i386并抱怨缺少头文件。
到目前为止一切顺利。现在,我只使用了clang
给clang_complete
的{{1}}用户选项提供的完全相同的选项?
不。当我这样做并尝试在Vim中自动填充一个单词时,它说
.vimrc
在Vim的QuickFix列表中。我有点需要这面旗帜 - 我该怎么办?
任何有用的想法。我希望在Vim下完成iOS代码的完成。
答案 0 :(得分:3)
clang_complete运行clang -cc1
,这会导致编译器前端运行而不是驱动程序。编译器前端不了解-arch
选项。 clang -cc1 --help
会向您显示可能的选项。您应该指定-triple
或-target-*
之一。
如果你不确定要使用什么,你可以像你一样手动运行clang,但是在详细模式下(-v
)。这样它将打印clang -cc1
命令行,您可以在其中找到适当的参数。
答案 1 :(得分: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开发。你可能想要查看这个分支:https://github.com/krisajenkins/clang_complete。我太新了,不能铿锵真的知道我在做什么,但它对我有用......)
答案 2 :(得分: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_option
文件或直接添加到clang_complete
字符串,{{1}}仅适用于某些但不适用我项目中的所有标题......没有明显的理由说明为什么一个有效而另一个无效。 (建议欢迎)。