千家信息网

YouCompleteMe CLick_的配置方法

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要讲解了"YouCompleteMe CLick_的配置方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"YouCompleteMe CLi
千家信息网最后更新 2024年12月13日YouCompleteMe CLick_的配置方法

这篇文章主要讲解了"YouCompleteMe CLick_的配置方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"YouCompleteMe CLick_的配置方法"吧!

import osimport ycm_core# These are the compilation flags that will be used in case there's no# compilation database set (by default, one is not set).# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.flags = ['-Wall','-Wextra',#'-Werror',#'-Wc++98-compat','-Wno-long-long','-Wno-variadic-macros','-fexceptions',# THIS IS IMPORTANT! Without a "-std=" flag, clang won't know which# language to use when compiling headers. So it will guess. Badly. So C++# headers will be compiled as C headers. You don't want that so ALWAYS specify# a "-std=".# For a C project, you would set this to something like 'c99' instead of# 'c++11'.#'-std=c99','-std=c++11','-stdlib=libc++',# ...and the same thing goes for the magic -x option which specifies the# language that the files to be compiled are written in. This is mostly# relevant for c++ headers.# For a C project, you would set this to 'c' instead of 'c++'.    '-x',    'c++',    '-I',    '.',    '-isystem',    '.',    '-I',    os.getcwd(),    '-I', os.getcwd() + "/..",#'-I', '/dev/shm/ClickHouse/libs/libpocoext/include',#'-I', '/dev/shm/ClickHouse/libs/libmysqlxx/include',#'-I', '/dev/shm/ClickHouse/libs/libdaemon/include',#'-I', '/dev/shm/ClickHouse/libs/libcommon/include',    '-isystem', '/usr/include/c++/7',    '-isystem', '/usr/include/c++/7/x86_64-pc-linux-gnu',    '-isystem', '/usr/include/c++/7/backward',    '-isystem', '/usr/include',    '-isystem', '/usr/include/c++/7',    '-isystem', '/usr/include/c++/7/bits',    '-isystem', '/dev/shm/src/include',    '-isystem'    '/usr/local/include',    '-isystem',    '/Library/Developer/CommandLineTools/usr/include',    '-isystem',    '/Library/Developer/CommandLineTools/usr/bin/../lib/c++/v1',] # Set this to the absolute path to the folder (NOT the file!) containing the# compile_commands.json file to use that instead of 'flags'. See here for# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html## Most projects will NOT need to set this to anything; you can just change the# 'flags' list of compilation flags. Notice that YCM itself uses that approach.compilation_database_folder = '' if os.path.exists( compilation_database_folder ):    database = ycm_core.CompilationDatabase( compilation_database_folder )else:    database = None SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ] def DirectoryOfThisScript():    return os.path.dirname( os.path.abspath( __file__ ) ) def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):    if not working_directory:        return list( flags )    new_flags = []    make_next_absolute = False    path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]    for flag in flags:        new_flag = flag     if make_next_absolute:        make_next_absolute = False        if not flag.startswith( '/' ):            new_flag = os.path.join( working_directory, flag )     for path_flag in path_flags:        if flag == path_flag:            make_next_absolute = True            break         if flag.startswith( path_flag ):            path = flag[ len( path_flag ): ]            new_flag = path_flag + os.path.join( working_directory, path )            break     if new_flag:        new_flags.append( new_flag )    return new_flags def IsHeaderFile( filename ):    extension = os.path.splitext( filename )[ 1 ]    return extension in [ '.h', '.hxx', '.hpp', '.hh' ] def GetCompilationInfoForFile( filename ):  # The compilation_commands.json file generated by CMake does not have entries  # for header files. So we do our best by asking the db for flags for a  # corresponding source file, if any. If one exists, the flags for that file  # should be good enough.  if IsHeaderFile( filename ):    basename = os.path.splitext( filename )[ 0 ]    for extension in SOURCE_EXTENSIONS:      replacement_file = basename + extension      if os.path.exists( replacement_file ):        compilation_info = database.GetCompilationInfoForFile(          replacement_file )        if compilation_info.compiler_flags_:          return compilation_info    return None  return database.GetCompilationInfoForFile( filename ) def FlagsForFile( filename, **kwargs ):  if database:    # Bear in mind that compilation_info.compiler_flags_ does NOT return a    # python list, but a "list-like" StringVec object    compilation_info = GetCompilationInfoForFile( filename )    if not compilation_info:      return None     final_flags = MakeRelativePathsInFlagsAbsolute(      compilation_info.compiler_flags_,      compilation_info.compiler_working_dir_ )     # NOTE: This is just for YouCompleteMe; it's highly likely that your project    # does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR    # ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.    #try:    #  final_flags.remove( '-stdlib=libc++' )    #except ValueError:    #  pass  else:    relative_to = DirectoryOfThisScript()    final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )    #try:  #  pass    #final_flags.remove( '-stdlib=libc++' )  #except ValueError:  #  pass    #from hello import headers  #final_flags.extend(headers)  print(flags)   return {    'flags': final_flags,    'do_cache': True  }

感谢各位的阅读,以上就是"YouCompleteMe CLick_的配置方法"的内容了,经过本文的学习后,相信大家对YouCompleteMe CLick_的配置方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0