Lunban-SDK 指北
一、生成compile_command.json 为什么要这个?vscode的c/c++扩展跳转太慢了,所以我一般都使用clangd,clangd又是依赖compile_commnad.json的。 修改SConstruct文件,在PrepareBuilding之前增加如下代码 env.Tool('compilation_db')… 注意⚠️:这个功能对scons有版本要求,如果发现有问题可以起个虚拟环境,安装个新版本的scons。 env['PRJ_CHIP'] = PRJ_CHIP env['PRJ_BOARD'] = PRJ_BOARD env['PRJ_KERNEL'] = PRJ_KERNEL env['PRJ_NAME'] = PRJ_NAME env['PRJ_APP'] = PRJ_APP env['PRJ_DEFCONFIG_NAME'] = PRJ_DEFCONFIG_NAME env['PRJ_OUT_DIR'] = PRJ_OUT_DIR # 生成 compile_commands.json env.Tool('compilation_db') env.CompilationDatabase() # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) 这样操作之后直接运行编译命令就可以的了,但是会发现clangd还是没办法跳转,AI了一下解决问题了,在根目录下新建.clangd文件,增加如下内容即可 CompileFlags: Add: - --target=riscv32 - -ferror-limit=0 Remove: - -march=* - -mabi=* - -mcmodel=* - -mno-* - -xtheade Diagnostics: UnusedIncludes: None MissingIncludes: None 原因是使用的工具链(如 riscv64-unknown-elf)包含一些 clangd 无法识别的特殊参数: (平头哥扩展 (-xtheade) - 这是芯片厂商的自定义指令扩展 特定的架构参数 - 如特殊的 -march 值 如果不移除这些参数,clangd 会报错,导致代码智能提示功能失效。这个配置文件确保 clangd 能正常工作,同时不影响实际的编译过程。