【问题标题】:Clangd - how to set default flags to be used when there is no `compile_commands.json`?Clangd - 如何设置没有`compile_commands.json`时使用的默认标志?
【发布时间】:2020-04-09 23:46:46
【问题描述】:

这可能是不可能的,但我还是想问。我使用 Clangd 作为 VSCode 的自动完成引擎。效果很好,但是有一个问题。

Clang 的官方 Windows 二进制文件依赖于 MSVC 标准库头文件。如果没有安装 MSVC,Clang 和 Clangd 会抱怨缺少标头。

有一个标志使 Clang 使用 MinGW 的 libstdc++ (--target=x86_64-w64-windows-gnu),我必须将其包含在 compile_commands.json 中。

此解决方案有效,但即使没有compile_commands.json,也有合理的自动完成功能会很好。

如果没有 compile_commands.json,我有没有办法告诉 Clangd 假设 --target=x86_64-w64-windows-gnu

【问题讨论】:

  • 我找到了一个可能的解决方案。启动 Clangd 时,VSCode 扩展会向其标准输入发送一些初始化参数。有一个其他未公开的参数 (initializationOptions.fallbackFlags),可让您指定自定义标志。现在我只需要一些巧妙的方法来即时修改它。
  • 我在类似的船上。您是否尝试过运行设置环境变量的脚本,并将该环境变量作为标志传递?
  • @FranciscoAguilera 我不完全理解这个想法,但现在 VSC 扩展现在允许您直接在配置中指定后备标志,所以这不再是问题了。
  • 当您说配置时,您是指.clangd 文件吗?还是 VS 代码 settings.json"clangd.fallbackFlags": [ "%CLANGD_FALLBACK_FLAGS%" ],?出于我的目的,我需要从 compile_commands.json 条目中解析标志并将其用作后备标志。
  • 是的,setting.json。 “我需要从 compile_commands.json 中解析标志” 哦,我明白了。那时可能行不通。我会尝试修改 compile_commands.json

标签: c++ clang clangd


【解决方案1】:

如果没有 compile_commands.json,我有没有办法告诉 Clangd 假设 --target=x86_64-w64-windows-gnu?

来自clangd getting started

compile_flags.txt

如果一个项目中的所有文件都使用相同的构建标志,你可以把那些 在源根目录中的 compile_flags.txt 中每行标记一个。

Clangd 将假定编译命令是 clang $FLAGS some_file.cc。

手动创建此文件是一个合理的起点,如果您 项目很简单。

只需使用--target=x86_64-w64-windows-gnu 创建compile_flags.txt 文件。

【讨论】:

    【解决方案2】:

    在提出问题后的某个时间点,VSCode Clangd 扩展开始向配置公开默认标志:"clangd.fallbackFlags": ["--target=x86_64-w64-windows-gnu"]

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多