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“找不到回复目录”的主要内容,如果未能解决你的问题,请参考以下文章

CMake找不到头文件

使用cmake/make打包Android 动态库

Laravel - 当 API 路由错误或找不到时如何显示 JSON?

CMAKE_TOOLCHAIN_FILE

CMake 和子文件夹中的头文件问题

CMake中file的使用