【问题标题】:Dynamic compiler path in c_cpp_properties.json VSCode settings filec_cpp_properties.json VSCode 设置文件中的动态编译器路径
【发布时间】:2023-01-11 01:10:49
【问题描述】:

我的.vscode 文件夹中有一个c_cpp_properties.json,它工作正常。但是,其中有一行是系统特定的:

"compilerPath": "~/.espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc"

虽然我可以假定 .espressif 工具的默认安装,但不幸的是,工具链的分发者更改了每个版本的路径(即 .../esp-2021r2-patch5-8.4.0/...

我想知道是否有办法使用类似

which xtensa-esp32-elf-gcc

在 json 中,所以这将随着工具链更新而更新?

【问题讨论】:

  • 您使用的是 IDF 扩展吗?
  • 您没有在公共“bin”目录中获得符号链接(或类似链接)?如果您不明白,那么编译器很可能不会在PATH 中,这意味着which 无论如何都无法找到它。
  • 创建指向编译器目录的符号链接,在每次更新编译器后更新符号链接
  • 我认为 VSCode 不会为您搜索编译器,这就是存在 json 设置的原因。每次重新安装编译器时,您都可以编写一个 shell 脚本来更新 json,但我认为 rioV8 关于固定 json 和符号链接的建议更好。
  • 我想我对如何实现你想做的事情有一个想法。一旦我在电脑前,我会回答这个问题。

标签: c++ c visual-studio-code embedded


【解决方案1】:

我首先要提到,最简单的方法是通过在 /usr/bin 中创建/或更新符号链接,如 cmets 中提到的 rioV8。

命令which xyz 无论如何都会查看path 环境变量,因此除非您在path 中列出的路径之一下有一个符号链接,否则不会那么容易。

话虽这么说,我可以想象您可能希望(出于某些特定原因)不时切换编译器(例如,在调试历史版本时),例如,您可以通过指定路径的预定义环境来实现。

所以为了做到这一点,我研究了 VS Code 的 CMake 工具如何解析 c_cpp_properties.json 文件并将除字符串以外的任何内容传递给 compilerPath 看起来不是一个好主意,但是如果我们看一下 Lines 430-451 of this file. 我们可以在决定使用哪个CXX / C 编译器时查看优先级。

基于此 - 你可以做的是转到你的CMakeLists.txt 文件,在你定义项目之前,你可以为你自己的 CXX 搜索添加这个 sn-p:

execute_process(COMMAND your_script_or_command_to_get_cxx_path_here RESULT_VARIABLE which_cxx OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CMAKE_CXX_COMPILER ${which_cxx})

project(TEST)

#... rest of your CMakeLists.txt

例如:

execute_process(COMMAND which g++ RESULT_VARIABLE which_cxx OUTPUT_STRIP_TRAILING_WHITESPACE)

清理并生成新的构建文件夹后,它应该覆盖c_cpp_properties.json 中的任何内容

但老实说,我只会坚持符号链接。

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多