我已经将基于 CMake 的项目导入 Ubuntu IDE。它使用纯 C++,没有 QML 组件。当我尝试运行它时,它不会部署到设备,而是在桌面上运行(失败,报告找不到 armhf ld 库),即使我选择了 armhf SDK,并且在 Kits 选项卡中,我的设备被选为当前套件,左下角的工具提示显示该应用程序将安装在设备上。
当我在“项目设置”中打开“运行”选项卡时,基于 CMake 的项目与基于 QMake 的项目不同,因为它具有“命令行参数”和“当前工作目录”字段,但没有“如果已安装则覆盖应用程序”和“调试后卸载应用程序”(我现在不记得确切的文本)。由此,我得出结论,Ubuntu IDE 认为我的应用程序不是针对 Ubuntu Touch,而是针对桌面。什么将基于 CMake 的项目标记为针对 IDE 的 Ubuntu Touch?
是否有可能在设备上运行没有 QML 的基于 CMake 的项目?SDK 没有针对此用例的模板:所有基于 CMake 的模板都使用 QML,并且唯一的纯 C++ 项目 (QtQuick App) 使用 QMake。
对于基于 QMake 的项目,我没有遇到这样的问题,目前我使用 CMake 构建库而不是可执行文件,然后将其与虚拟 QMake 项目链接到可执行文件中。但这似乎是一个临时解决方案。
答案1
好的,如果您正在使用桌面套件并且 cmake 抱怨它找不到 armhf 工具,那么您可能首先没有在桌面上安装 cmake(存在依赖关系问题,我们正在尝试解决 atm)并且 QtCreator 正在使用您为设备支持创建的其中一个点击 chroot 中的 cmake 安装。
那么该怎么办:
- 关闭 Ubuntu SDK IDE
- 安装 cmake “apt install cmake”
- 启动 Ubuntu SDK IDE
- 转到:选项 -> 构建和运行,然后单击 CMake 选项卡
- 确保选择 /usr/bin/cmake 作为默认值
- 打开 Kits 选项卡,选择您的桌面套件并确保使用 /usr/bin/cmake 作为 cmake 工具。
- 删除项目的构建文件夹并再次构建
由于设备每次启动时都会自动检查,因此无需更换设备套件。
如果您想打包自己的 cmake 项目,则需要确保它已针对手机正确打包。最好的办法是查看原始 ubuntu SDK 模板之一,了解其如何完成。
答案2
好的,经过多次实验,我发现我做错了什么。
因此,要让 Ubuntu IDE 创建一个在设备上运行基于 CMake 的项目的配置,您只需要在 CMakeLists.txt 中设置 UBUNTU_MANIFEST_FILE 变量,并且需要明确将其标记为 CACHE INTERNAL。当您了解 Ubuntu QtCreator 插件的工作原理时,这一点很明显,但除此之外,就不那么明显了。
因此,只需添加
set(UBUNTU_MANIFEST_PATH "manifest.json" CACHE INTERNAL "Path to manifest file")
到您的 CMakeLists.txt,您就差不多完成了。
但是,我也遇到了一个问题,如果我将“${CMAKE_SOURCE_DIR}/manifest.json”指定为 UBUNTU_MANIFEST_PATH,即使该文件确实存在,它也不起作用。
不好的是,Ubuntu IDE 仍然会为项目创建两个运行配置。第一个是默认配置,其名称基于可执行目标的名称,仍将尝试在桌面上运行 armhf 代码。我认为这是一个错误。
第二个配置的名称取决于您在 .desktop 文件的“hooks”部分中写的内容。如果该名称与可执行文件名称相同,则该配置将添加“2”(即 cmake_test2)。第二个配置是要使用的配置 - 它在设备上运行项目,但您必须在“项目”页面的“运行”部分中选择它 - 默认情况下,选择了错误的运行配置。
总而言之,Ubuntu IDE 中的 CMake 支持似乎仍然有点脆弱/有缺陷。