首页 > 解决方案 > CMake File API“找不到回复目录”

问题描述

我在 CLION 的 Docker 中使用工具链时遇到问题。我的 Docker 容器基于 ubuntu 18.04 并安装了 CMake 3.17。图像定义基于参考实现。

当我使用 CLion 重新加载 CMake 项目时,会显示以下错误。

-- Build files have been written to: /tmp/tmp.vmmD6opEtD/cmake-build-debug-local-docker
CMake File API: /path/to/glow/cmake-build-debug-local-docker: no reply dir found

当我直接在Docker容器中配置CMake项目时,就成功了。我相信 CMake 项目本身没有问题。

“找不到回复目录”是什么意思?即使使用谷歌搜索,也没有此错误消息的线索。

标签: c++dockercmakeclion

解决方案


我遇到了完全相同的错误,这就是我如何进行故障排除并基本上解决了该错误。

因为我使用的是 CMake 的 Ninja 生成器,所以我的前几个搜索查询包括“clion ninja remote development”。幸运的是,第一个搜索结果是CLion 开发人员的一篇博客文章,其中吹嘘使用CMake File API添加了 Ninja 支持。我对那个 API 很好奇,因为它也出现在错误消息中并检查了它的文档。

它的文档指出“API v1 位于<build>/.cmake/api/v1/目录中”并且有一个名为“ reply ”的子目录。现在,如果您/tmp/tmp.vmmD6opEtD/cmake-build-debug-local-docker在自己的容器中查看该目录,您肯定会在 下找到回复目录.cmake/api/v1/reply,其中包含一堆 JSON 文件。这些文件似乎提供了有关生成的构建系统的信息,并由 CLion 使用。

现在问题很清楚了:为什么 CLion 会在本地机器(运行 CLion 的机器)而不是容器中查找回复目录?显然 CLion 试图在幕后下载回复目录但失败了。要查看实际的错误消息,您需要从命令行运行 CLion。如果您使用工具箱安装 CLion,则启动 CLion 的脚本应该类似于~/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/203.7148.70/bin/clion.sh. 只需从命令行启动 CLion,重新加载 CMake 项目并查看您将收到的错误消息。

对我来说,本地机器上没有回复目录,因为rsync无法通过 SSH 从远程机器中的容器下载构建目录。当我再次尝试使用相同的设置但使用 CLion 生成的简单 hello world 项目时,错误消息改为“无法读取 CMake 依赖项信息”,导致我获得了这张票。现在很容易猜到原因。我的容器在 2 个 SSH 跳转框后面,这个设置不知何故让 CLion 弄乱了known_hosts文件。由于一团糟known_hosts,CLion 无法下载回复目录rsync。我通过将远程容器移动到我的本地机器来简化我的设置,现在使用 CLion 进行远程开发可以很愉快地工作。

如果您正在寻找快速修复(或只是尝试),我建议您遵循票证中提到的解决方法。


推荐阅读