我的C项目有以下结构。这是一个大型项目的结构,我无法改变结构。我想使用YouCompleteMe来完成这个项目的语义代码。
main/ // folder for C file to be compiled
|- module1.c // module main C file.
|- module2.c
|- .....
module1/
|- mod1_func1.c // function file to be included in main module C file.
|- mod1_func2.c
|- mod2_func3.c
module2/
|- mod2_func1.c
|- mod2_func2.c
|- mod2_func3.c
moduleX.c
的内容,这将包括所有相关的头文件和模块相关的C文件。
#include "header1.h"
#include "header2.h"
...
#include "modX_func1.c"
#include "modX_func2.c"
modX_funcX.c
的内容有一个或几个函数定义。没有包含标题
// no header file included here
int modX_funcX(void) {.....}
由于未包含相关标头,clang
必须解析moduleX.c
才能在modX_funcX.c
上完成代码,我已尝试从命令行完成clang
代码。下面的命令工作
clang -x c -fsyntax-only -code-completion-at mod1_func1.c:4:11 module1.c
所以我的问题:如何在编辑modX_funcX.c
文件时配置YouCompleteMe来完成代码?
我想对YouCompleteMe源进行修改可能需要完成这项工作。我目前的想法是添加格式为:
的文件映射数据库path_of_file_to_complete:path_of_file_for_clang_to_parse
因此,在发送代码完成请求之前,根据当前缓冲区名称从数据库中获取path_of_file_for_clang_to_parse
,将此文件名传递给libclang
。
我的想法可行吗?如果是,那么添加此文件映射功能的确切位置在哪里?
答案 0 :(得分:1)