问题
Support a language server (like ccls or clangd) (IDFGH-4929)
在 ESP-IDF extension for vscode 中,使用 clangd 出现
espidf Unknown argument '-mlongcalls'; did you mean '-mlong-calls'?
原因
clangd 不支持这些编译选项。
解决方法
1.配置 clangd 扩展
1.去 VSCode 拓展中下载 clangd 拓展,下载完后,它会提示是否自动下载 clangd,可以自由选择。
需要注意的是,clangd 19.1.2 有问题,所以不要使用,请使用 20.1 或更高的版本。
2.进入 clangd 扩展设置,填写 clangd 的路径,如果直接填写 clangd
的话,需要配置 Windows 的环境变量。
设置 Clangd: Arguments
--query-driver=C:/Users/ShiinaKaze/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc.exe,C:/Users/ShiinaKaze/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-g++.exe
3.然后去你的项目根目录下,创建名为 .clangd
的文件,该文件格式为 YAML(可以下一个 YAML 扩展,方便编写),填写如下内容:
CompileFlags:
Remove:
[
-mlongcalls,
-mdisable-hardware-atomics,
-fno-shrink-wrap,
-fstrict-volatile-bitfields,
-fno-tree-switch-conversion,
]
Diagnostics:
Suppress: [-Werror, -Wunused-lambda-capture]
4.重启 VSCode
其他方法(未完善)
虽然 ESP-IDF 扩展默认编译器不是 clang,但是仍然可以配置使用,并且 clang 由 espressif 提供。
1.配置 ESP-IDF 扩展
在 ESP-IDF 扩展设置中找到 Idf: Custom Extra Vars,添加 Item 为 IDF_TOOLCHAIN,value 为 clang。
2.配置 clangd 扩展
1.去 VSCode 拓展中下载 clangd 拓展,下载完后,它会提示是否下载 clangd,可以自由选择,因为我们使用 esp 所提供的 clang 工具链也会提供 clangd。
2.下载 esp-clang,解压,例如我的解压路径为:
D:\Development\Tools\esp-clang
3.设置 clangd 扩展的 Clangd:path 为刚刚解压的 clang,注意,设置的路径为 D:\Development\Tools\esp-clang\bin
4.配置 clang 的系统环境变量 Path,而不是用户变量。
5.重启 VSCode,结束。