我在尝试使用带有Unix风格Makefile的CMake和带有youcompleteme插件的vim(我是Linux老手和Mac新手)在Mac(Yosemite,Xcode 6)上设置C ++项目时遇到了问题。 Xcode)。代码会生成并运行,但是youcompleteme会引发一些伪造的错误,我认为这些错误归结为无法找到<cstdint>标头。
我也刚刚在Linux上尝试过,并且遇到了同样的问题。
我已经将.ycm_extra_conf.py配置为使用cake生成的compile_commands.json。compile_commands.json中的“ command”行使用以下标志:
"command": "/usr/bin/c++ -std=c++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks -I/usr/local/include -I/Users/tony/Dev/cow/jni -I/Users/tony/Library/Frameworks/SDL2.framework/Headers -Wall -Wextra -Wunused -F/Users/tony/Library/Frameworks -o ...
似乎没有明确引用任何包含stdint作为直接父目录的目录。
有没有一种方法可以使youcompleteme用libclang进行处理,从而可以隐式找到目录,这在命令行上运行c ++时似乎可以正常工作?还是在不进行硬接线的情况下使cmake添加适当的系统头路径的最佳方法是什么?我希望我的CMakeLists.txt具有可移植性,并且能够应对工具链升级。
我的.ycm_extra_conf.py几乎是所提供示例的一个副本,对其进行了稍微修改,以找到放置它的compile_commands.json。
正如@ladislas所说,YCM需要明确指向所有相关的include目录,因为libclang不会使用普通编译器驱动程序调用(即命令行中的clang ++)将使用的相同隐式位置。
在OSX上,我通常要做的是让YCM知道Xcode的libc ++标头,例如(在.ycm_extra_conf.py中):
import os
import ycm_core
import subprocess
xcode_cpp11headers = subprocess.Popen("xcode-select -p", stdout = subprocess.PIPE, shell=True).communicate()[0].rstrip('\n') + '/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1'
.
.
flags = [
.
.
'-isystem',
xcode_cpp11headers,
.
.
]
根据当前Xcode的安装位置,使用正确的路径填充“ xcode_cpp11headers”变量,如果您要使用libc ++的命令行工具版本(即,包含在/ Library / Developer中),则可以相应地对其进行更改。 / CommandLineTools / usr / include / c ++ / v1)或libc ++的源发行版(如果已编译)。
当然,这取决于平台,您可以在项目旁边提供特定于平台的.ycm_extra_conf.py,也可以根据当前平台使用一些额外的python代码以不同的方式填充该变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句