【问题标题】:Extract compiler command from cmake从 cmake 中提取编译器命令
【发布时间】:2014-01-28 14:27:34
【问题描述】:

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

【问题讨论】:

  • 您是否修改了 youcompleteme 配置以使用 CMake 生成的 compile_commands.json 文件?效果很好。

标签: cmake


【解决方案1】:

http://clang.llvm.org/docs/LibTooling.html

设置 CMAKE_EXPORT_COMPILE_COMMANDS=ON。

【讨论】:

    【解决方案2】:

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

    请务必注意,compdb ninja 工具需要一个规则名称作为参数。文档中似乎没有提到这一点。

    【讨论】:

      【解决方案3】:

      最简单的通常是做一些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 有现成可用的类似机制,我不会感到惊讶。

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

      【讨论】:

        猜你喜欢
        • 2014-12-29
        • 2021-03-12
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 2021-09-06
        • 1970-01-01
        相关资源
        最近更新 更多