CMake File API“找不到回复目录”
Posted
技术标签:
【中文标题】CMake File API“找不到回复目录”【英文标题】:CMake File API "no reply dir found" 【发布时间】:2021-02-12 11:22:17 【问题描述】:我在 CLION 的 Docker 中使用工具链时遇到问题。我的 Docker 容器基于 ubuntu 18.04 并安装了 CMake 3.17。图片定义基于this参考实现。
当我使用 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 项目本身没有问题。
“找不到回复目录”是什么意思?即使使用谷歌搜索,也没有此错误消息的线索。
【问题讨论】:
【参考方案1】:我遇到了完全相同的错误,这是我进行故障排除并基本解决错误的方法。
因为我使用的是 CMake 的 Ninja 生成器,所以我的前几个搜索查询包括“clion ninja 远程开发”。幸运的是,第一个搜索结果是 a blog post by CLion developers,它吹嘘使用 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 依赖项信息”,导致我转到 this ticket。现在很容易猜到原因。我的容器在 2 个 SSH 跳转框后面,这个设置不知何故让 CLion 弄乱了known_hosts
文件。使用混乱的known_hosts
,CLion 无法使用rsync
下载回复目录。我通过将远程容器移动到本地计算机来简化设置,现在使用 CLion 进行远程开发可以正常工作。
如果您正在寻找快速修复(或只是尝试),我建议您遵循票证中提到的解决方法。
【讨论】:
以上是关于CMake File API“找不到回复目录”的主要内容,如果未能解决你的问题,请参考以下文章