从cmake中提取编译器命令



需要告诉各种基于clang的完成工具(如youcompleteme)要使用什么编译器标志来编译源代码。如果要使用的编译器选项可以从项目文件中提取出来,那就太好了。从cmake项目或生成的make或ninja格式的结果中提取标志(自动而非手动)的最简单方法是什么?

请参阅http://clang.llvm.org/docs/LibTooling.html

将CMAKE_EXPORT_COMPILE_COMMANDS设置为ON。

Ninja实际上能够打印出构建所有或特定目标的命令。而且它做得非常快。在我的机器上,对于1122个命令,0.033秒。它可以将它们打印为shell命令或编译数据库,ycm具有使用编译数据库的实用程序。

需要注意的是,compdbninja工具需要一个规则名称作为参数。文件中似乎没有提到这一点。

最简单的方法通常是从CC=echo CXX=echo make的本质上做一些事情,并从中提取参数。

clang_complete插件中已经实现了这一点,请参阅cc_args.py脚本https://github.com/Rip-Rip/clang_complete/blob/master/bin/cc_args.py并记录在https://github.com/Rip-Rip/clang_complete/blob/master/doc/clang_complete.txt了解更多信息。如果我没有记错的话,YCM可以读取.crang_complete文件。

例如,在clang_complete中,您可以像make CC='~/.vim/bin/cc_args.py gcc' CXX='~/.vim/bin/cc_args.py g++' -B一样运行它

如果YCM有现成的类似机制,我也不会感到惊讶。

[EDIT]是的,请参阅https://github.com/Valloric/YouCompleteMe#c-族语义完成引擎的使用以及YCM文档中的"Clang’s CompilationDatabase"支持。基本上,要么让make生成一个带有编译标志的文件供YCM使用,要么让clang生成一个编译数据库并让YCM使用。

最新更新