2011-10-20 11 views
5

के लिए Vim स्वत: पूर्णता हाल ही में मैं एक विम-आधारित आईओएस वर्कफ़्लो स्थापित करने की कोशिश कर रहा हूं।clang_complete: आईओएस

मैं clang_complete पाया, और के रूप में यहाँ वर्णित इसलिए

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

की तरह मेरे .vimrc में बजना उपयोगकर्ता विकल्पों की स्थापना की है: http://www.zenskg.net/wordpress/?p=199#comment-229

और कुछ ढांचा/हैडर/lib रास्तों गयी। मैं पूरी लाइन पोस्ट नहीं कर रहा हूं क्योंकि यह बहुत बड़ा है।

तो मैं कमांड लाइन से clang का उपयोग कर (एक ही विकल्प का उपयोग कर) अपने प्रोजेक्ट में फ़ाइलों में से एक के संकलन का परीक्षण किया है, और यह ठीक संकलित, लेकिन केवल अगर मैं -arch armv6/7 ध्वज का उपयोग करें। अगर मैं i386 के लिए संकलित करने की कोशिश नहीं करता और अनुपलब्ध हेडर फ़ाइलों की शिकायत करता हूं।

अभी तक इतना अच्छा है। अब मैं अपने .vimrc में clang_complete के उपयोगकर्ता विकल्पों को clang पर दिए गए सटीक वही विकल्पों का उपयोग करता हूं?

नहीं। जब मैं ऐसा और विम में एक शब्द स्वत: पूर्ण करने का प्रयास करें, यह कहता है

unknown argument: '-arch' 
विम की QuickFix सूची में

। मुझे इस झंडे की ज़रूरत है- मुझे कैसे आगे बढ़ना चाहिए?

कोई भी विचार उपयोगी है। मुझे वीम के तहत काम करने के लिए आईओएस कोड पूरा करना अच्छा लगेगा।

उत्तर

3

clang_complete clang -cc1 चलाता है, जो संकलक फ्रंट-एंड चलाने के लिए ड्राइवर का कारण बनता है। कंपाइलर फ्रंट-एंड -arch विकल्प नहीं समझता है। clang -cc1 --help आपको संभावित विकल्प दिखाएगा। आपको शायद -triple या -target-* में से एक निर्दिष्ट करना चाहिए।

यदि आप सुनिश्चित नहीं हैं कि क्या उपयोग करना है, तो आप मैन्युअल रूप से क्लैंग चला सकते हैं, लेकिन वर्बोज़ मोड (-v) में। इस तरह यह clang -cc1 कमांड लाइन प्रिंट करेगा, जहां आप उपयुक्त तर्क पा सकते हैं।

+0

बहुत बहुत धन्यवाद ... यह मुझे बहुत आगे मिला। मैंने वर्कोज़ मोड में एक्सकोडबिल्ड चलाया, क्लैंग विकल्पों की प्रतिलिपि बनाई, फिर वर्बोज़ मोड में इन विकल्पों के साथ झुकाव चलाया, फिर आउटपुट से clang -cc1 विकल्पों को मेरे .vimrc में कॉपी किया। clang_complete अभी भी मेरे कोड को स्वतः पूर्ण नहीं कर सकता है, मुझे लगता है कि मुझे -frameworks ध्वज का उपयोग करने की आवश्यकता है जो कि -cc1 में समतुल्य प्रतीत नहीं होता है। क्या आप मुझे कुछ दस्तावेज बता सकते हैं? मैन पेज बहुत अच्छे नहीं हैं- मैं आपको बताए बिना -cc1 विकल्प के बारे में कभी नहीं जानता था। – Sam

+1

यहां कुछ ऐसा है जो आप कोशिश कर सकते हैं: खोलें ~/.vim/plugin/clang_complete.vim (या जहां भी आपने clang_complete इंस्टॉल किया है), और ClangCompleteBinary फ़ंक्शन देखें। वहां दो चीजें हैं जो आप कोशिश कर सकते हैं: 1. v: shell_error condition block को टिप्पणी करें। क्लैंग अक्सर संकलन त्रुटि होने पर भी अच्छे समापन विकल्प लौटाएगा, और clang_complete इस तथ्य को अनदेखा करता है। 2. सिस्टम में सिस्टम (एल: कमांड) बदलें (एल: कमांड। '| और टीई/टीएमपी/क्लैंग.लॉग') और विम से पूरा होने का ट्रिगर करें। फिर आप clang से सटीक त्रुटि आउटपुट /tmp/clang.log में देख पाएंगे। उम्मीद है कि मदद करता है। –

3

डिफ़ॉल्ट रूप से, clang_complete क्लैंग बाइनरी /usr/bin/clang का उपयोग कर रहा है, लेकिन एक्सकोड नहीं है। यह क्लैंग लाइब्रेरी /Developer/usr/clang-ide/lib/libclang.dylib का उपयोग कर रहा है। वे काफी समान नहीं हैं। यदि आप एक्सकोड का उपयोग कर रहे विकल्पों को कॉपी कर रहे हैं, तो आपको यह सुनिश्चित करना होगा कि 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 स्वीकार किया जाता है।

(पी एस - मैं अन्य समस्याओं आईओएस के विकास के लिए काम करने के लिए हो रही clang_complete के एक जोड़े था आप पराक्रम इस कांटा की जांच करना चाह: https://github.com/krisajenkins/clang_complete मैं वास्तव में पता करने के लिए मैं क्या कर रहा बजना करने के लिए बहुत नया हूँ।। , लेकिन यह मेरे लिए काम कर रहा है ...)

0

5.1 एसडीके का उपयोग करके मैं libclang.dylib का उपयोग करते समय भी स्वीकार नहीं कर पाया।

कुछ futzing के बाद (यानी, मैन्युअल -v ध्वज के रूप में सुझाव दिया साथ xcodebuild द्वारा उत्पादित बजना आदेशों चल), मेरे सबसे अच्छे सेटअप था:

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 जोड़ने केवल एक चीज मैं उल्लेख नहीं दिखाई है स्टैक ओवरफ्लो या अन्य जगहों पर अन्य संसाधनों में (स्पष्ट रूप से यह झंडा क्लैंग ड्राइवर और कच्चे सीसी 1 झंडे के बास्टर्डनाइज्ड संयोजन को पार करने की अनुमति देता है)। एक बार यह जोड़ा जाने के बाद अचानक यह कम से कम कोको और 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 

इसके अलावा, भले ही मैं या तो मेरे .clang_completeclang_user_option रों स्ट्रिंग के लिए फ़ाइल या सीधे, clang_complete के लिए विभिन्न -I झंडे जोड़ दिया है केवल कुछ के साथ काम करता है लेकिन मेरे प्रोजेक्ट में सभी शीर्षलेख नहीं ... कोई स्पष्ट कारण नहीं है कि कोई काम क्यों करता है लेकिन दूसरों को नहीं। (सुझाव स्वागत है)।