2011-10-08 15 views
5

चौखटे मैं /tmp/test.cpp के लिए निम्न सहेजते हैं:ओएस एक्स के साथ उपयोग करना clang_complete

#include <CoreServices/CoreServices.h> 
#include <iostream> 

int main() { 
    CFStringRef my_string = CFSTR("hello, world!"); 
    std::cout << CFStringGetLength(my_string) << '\n'; 
} 

मैं !clang++ -framework CoreServices % साथ सही ढंग से इस संकलन सकता है, लेकिन clang_complete CoreServices से कुछ भी पूरा नहीं कर सकते।

दस्तावेज़ कहते हैं कि मुझे .clang_complete फ़ाइल में संकलक विकल्प रखना चाहिए (इस मामले में मैं /tmp/.clang_complete का उपयोग कर रहा हूं), हालांकि मैंने अभी तक जो भी प्रयास किया है, वह test.cpp|| unknown argument: '-framework' त्वरित फिक्स विंडो में दिखाई दे रहा है।

ढांचे के साथ सही ढंग से निपटने के लिए clang_complete प्राप्त करने का सही तरीका क्या है?

+0

वीआईएम आप से clang_complete खोज करने का प्रयास करें cwd no? फिर यदि आप/tmp/में नहीं हैं/तो आपकी फ़ाइल/tmp/में नहीं होनी चाहिए! – Geoffroy

+0

cwd is/tmp/- मुझे पता है कि .clang_complete फ़ाइल को 'अज्ञात तर्क' त्रुटि के कारण पढ़ा जा रहा है जब मैं '-framework 'विकल्प को .clang_complete में जोड़ता हूं। – irh

+0

क्या आप clang_complete का उपयोग कर कॉल करना चाहते हैं:! Clang ++? लेकिन यह केवल संकलक को बुलाओ! क्या आपका clang_complete इस प्लगइन है: http://www.vim.org/scripts/script.php?script_id=3302? – Geoffroy

उत्तर

0

एक उपयोगी उत्तर के लिए clang_complete: Vim autocompletion for iOS देखें। स्पष्ट रूप से clang_complete-cc1 विकल्प का उपयोग करता है जो -framework तर्क का समर्थन नहीं करता है।

मैं -arch तर्क मैं की जरूरत है, हो सकता है -cc1 आर्ग में से एक के लिए प्रतिस्थापन के रूप में -triple और -target विकल्पों का उपयोग करने -framework जगह ले सकता है कर रहा था?

अपने त्रुटि पुन: पेश करने के लिए, आप कर सकते हैं

:! clang -cc1 % -framework CoreServices 

तो मुझे लगता है सवाल अब हो जाता है "मैं clang -cc1 के चौखटे कैसे पारित कर सकते हैं?"।

संपादित करें:

clang++ -v -framework CoreServices ./test.cpp 

चलाकर आप clang -cc1

खान के उत्पादन प्राप्त कर सकते हैं

-triple x86_64-apple-macosx10.6.7 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 123.2 -v -resource-dir /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/../lib/clang/2.1 -fdeprecated-macro -ferror-limit 19 -fmessage-length 179 -stack-protector 1 -fblocks -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/w2/w26NavGvGauuJwhTtEeQ9++++TI/-Tmp-/cc-GbJXd6.o -x c++ ./test.cpp

मैं -ओ तर्क, और इनपुट फ़ाइल, से हटा दिया था अंत और इसे .vimrc में उपयोगकर्ता विकल्पों में जोड़ा गया लेकिन कोड पूर्णता अभी भी सही तरीके से काम नहीं करती है .. हम्म

+0

आपके योगदान के लिए धन्यवाद :) यदि कोई अन्य उत्तर आपको जल्द ही बक्षीस नहीं मिलता है;) – Geoffroy

0

मामले किसी को भी अभी भी यह समस्या है (मैं company-clang को spacemacs एक्सटेंशन के साथ यह हो रही है, लेकिन मैं उम्मीद मुद्दा एक ही है) ...

clang -framework तर्क जाहिरा तौर पर लिंकर को पारित कर दिया है , जबकि clang -cc1 विशेष रूप से संकलन के साथ चिंतित है (इसलिए यह लिंकर विकल्पों के बारे में नहीं जानता या समर्थन नहीं करता है; यह linker-option=<option> तर्क स्वीकार करता है, जाहिर है, जो मेरे खोल में मेरे लिए काम करता था, लेकिन .clang_complete फ़ाइल में जोड़े जाने पर अपरिचित था)। एक ढांचा मूल रूप से हेडर के नेस्टेड संग्रहों का एक गुच्छा है, हालांकि, आप केवल -I के साथ ढांचे में आवश्यक सभी शीर्षकों को शामिल कर सकते हैं और यह काम करेगा। Qt5 के लिए

उदाहरण:

बजाय

...

-F/usr/local/opt/qt5/lib 
-framework QtCore 

उपयोग ...

-I/usr/local/opt/qt5/lib/QtCore.framework/Versions/Current/Headers 

मैं तुम्हें वास्तव में शामिल किए जाने वाले निर्देशिका यह पता लगाने की अपनी विशेष ढांचे में हेडर के कुछ आत्मनिरीक्षण करना पड़ सकता है लगता है। उनमें से बहुत हो सकता है। बहुत सुंदर नहीं है, लेकिन यह काम करता है (मेरे मामले में, कम से कम)।