如果我将以下内容保存到/tmp/test.cpp:
#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 :(得分:0)
请参阅clang_complete: Vim autocompletion for iOS以获得有用的答案。显然clang_complete
使用不支持-cc1
参数的-framework
选项。
我能够使用-triple
和-target
选项作为我需要的-arch
参数的替换,也许其中一个-cc1
args可以替换-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
我从最后删除了-o参数和输入文件,并将其添加到.vimrc
中的用户选项,但代码完成仍然无法正常工作..嗯
答案 1 :(得分:0)
如果有人还有这个问题(我正在使用company-clang
的spacemacs扩展,但我希望问题是相同的)...
clang -framework
参数显然传递给链接器,而clang -cc1
仅涉及编译(因此它不知道或支持链接器选项;它接受linker-option=<option>
显然,这个参数在我的shell中对我起作用,但在添加到.clang_complete
文件时却无法识别。但是,框架基本上只是一堆嵌套的标头集合,因此您可以使用-I
手动包含框架中所需的所有标头,它将起作用。
Qt5示例:
而不是......
-F/usr/local/opt/qt5/lib
-framework QtCore
使用...
-I/usr/local/opt/qt5/lib/QtCore.framework/Versions/Current/Headers
我想您可能需要对特定框架中的标头进行一些内省,以确定要包含哪些目录。可能是他们中的很多人。不是很漂亮,但它起作用(至少在我的情况下)。