#ros #linker #lsp #catkin #compilecommands

app symlinkccc

一个用于从catkin构建中链接编译命令的小工具

3个版本 (稳定)

1.1.0 2023年3月20日
1.0.1 2023年3月3日
0.2.0 2023年2月18日

文件系统 中排名第 750

每月下载量 26

MIT 许可证

33KB
781

symlinkccc

一个用于符号链接Catkin编译命令的工具。

入门指南

安装 rust,并确保它已在您的PATH中,通过将其添加到

test -f "${HOME}/.cargo/env" && source "${HOME}/.cargo/env" 

您的 .bashrc 文件(或等效文件)中。

使用以下命令安装此包

cargo install symlinkccc

然后,在 catkin 工作空间中

catkin config --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
catkin build 
symlinkccc

此命令非常快,特别是与平均的 catkin 构建时间相比,所以我为 catkin 创建了一个包装器,该包装器在每个 catkin build 之后执行 symlinkccc 程序,并传递任何参数。将其添加到您的 .bashrc 文件(或等效文件)中。

_catkin_wrapper () {
    if (( $# == 0 ))
    then
        \catkin 
    else
        if [[ $1 == "build" ]]
        then 
            \catkin build ${@:2} && symlinkccc
        else 
            \catkin $@
        fi
    fi
}

alias catkin="_catkin_wrapper"

为什么?

ROS 是一个在机器人领域工作时非常有用的框架,而 catkin 是一组非常有用的工具,用于构建和处理所有 ROS 软件包。 clangd 是一个很好的 C++ 编程语言语言服务器。然而,catkinclangd 并不是真正的朋友...

clangd 需要一个 compile_commands.json 文件来理解软件包的依赖关系。这可以通过构建工具 cmake 生成,而 catkin 在底层调用它。要使 catkin 生成这些文件,请将 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 添加到 cmake 参数中,例如这样

catkin config --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

问题是 catkin 将 compile_commands.json 文件放置在每个单个软件包的构建文件夹中,而 clangd 想要它在每个软件包的源文件夹根目录中(因为与构建文件夹相比,您更有可能从源文件夹编辑代码)。ROS/catkin 的一个优点是

待办事项

如果有时间,我想探索的一些事情。我怀疑这将对实际性能的影响不大。

  • 修复由于工作区名称为模块名称以及其他多个原因导致的警告
  • 使用异步操作
  • 异步处理源文件和构建目录
  • 异步加载文件(package.xml/CMakeLists.txt)
  • 异步链接不同文件
  • 测试是否可以使用cargo watch来检查是否需要重新链接
  • 尝试将rospack命令纯用Rust实现
  • 看看是否可以为配置文件重新排列链接,而不是每次程序执行时都删除旧链接
  • 通过消除不必要的依赖,尽量减小二进制文件的大小
  • ROS能否在纯Windows上编译?如果是,则符号链接将不起作用。

依赖项

~6–15MB
~181K SLoC