2011-10-08 9 views
5

Se salvo quanto segue per /tmp/test.cpp:Utilizzando clang_complete con OS X framework

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

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

posso compilare questo correttamente con !clang++ -framework CoreServices %, tuttavia clang_complete non può completare qualsiasi cosa, da CoreServices.

La documentazione dicono che dovrei mettere opzioni del compilatore in un file .clang_complete (in questo caso sto usando /tmp/.clang_complete), ma tutto quello che ho provato risultati finora nel test.cpp|| unknown argument: '-framework' che appare nella finestra soluzione rapida.

Qual è il modo corretto di ottenere clang_complete per gestire correttamente i framework?

+0

VIM prova a cercare clang_complete da te cwd no? Quindi se non sei in/tmp/il tuo file non deve essere in/tmp /! – Geoffroy

+0

cwd is/tmp/- So che il file .clang_complete viene letto a causa dell'errore "argomento sconosciuto" che compare solo quando aggiungo l'opzione '-framework' a .clang_complete. – irh

+0

Intendi chiamare clang_complete usando:! Clang ++? Ma questo chiama solo il compilatore! Il tuo clang_complete è questo plugin: http://www.vim.org/scripts/script.php?script_id=3302? – Geoffroy

risposta

0

Vedere clang_complete: Vim autocompletion for iOS per una risposta utile. Apparentemente clang_complete utilizza l'opzione -cc1 che non supporta l'argomento .

sono stato in grado di utilizzare -triple e -target opzioni come sostituti per l'argomento -arch mi serviva, forse uno dei -cc1 args può sostituire -framework?

Per riprodurre l'errore, si può fare

:! clang -cc1 % -framework CoreServices 

Quindi penso che la questione diventa ora "Come posso passare quadri a clang -cc1?".

EDIT: Eseguendo

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

È possibile ottenere l'output di clang -cc1

miniera è stata

-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

ho rimosso l'argomento -o, e il file di input, da alla fine e aggiunto alle opzioni utente in .vimrc ma il completamento del codice continua a non funzionare correttamente .. Hmm

+0

Grazie per il tuo contributo :) Se non ci sono altre risposte ottieni subito la taglia;) – Geoffroy

0

Nel caso qualcuno ha anche ancora questo problema (che sto avendo con le estensioni spacemacs per company-clang, ma mi aspetto che il problema è lo stesso) ...

L'argomento clang -framework è apparentemente passato al linker , mentre clang -cc1 riguarda esclusivamente la compilazione (quindi non conosce o supporta le opzioni del linker; accetta un argomento linker-option=<option>, apparentemente, che ha funzionato per me nella mia shell, ma non è stato riconosciuto quando aggiunto al file .clang_complete). Un framework è fondamentalmente solo un gruppo di raccolte nidificate di intestazioni, tuttavia, quindi è possibile includere manualmente tutte le intestazioni necessarie nel framework con -I e funzionerà.

Esempio per QT5:

Invece di ...

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

Usa ...

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

Credo che potrebbe essere necessario fare un po 'introspezione delle intestazioni nel quadro particolare di capire esattamente quali directory per includere. Potrebbe essere un sacco di loro. Non molto carina, ma funziona (nel mio caso, almeno).