从cmake中提取编译器命令

时间:2014-01-28 14:27:34

标签: cmake

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

3 个答案:

答案 0 :(得分:3)

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

设置CMAKE_EXPORT_COMPILE_COMMANDS = ON。

答案 1 :(得分:2)

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

重要的是要注意compdb忍者工具需要一个规则名称作为参数。文档中似乎没有提到这一点。

答案 2 :(得分:1)

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

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

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

一样运行它

如果YCM已经开箱即用的类似机制,我不会感到惊讶。

[编辑]是的,请参阅YCM文档中的https://github.com/Valloric/YouCompleteMe#c-family-semantic-completion-engine-usage和“Clang的CompilationDatabase”支持。基本上,要么生成一个带有YCM编译标志的文件,要么让clang生成一个编译数据库并让YCM使用它。