Ubuntu IDE пытается запускать проекты ARM на базе CMake на компьютере вместо устройства: ошибка или что?
Я импортировал основанный на CMake проект в Ubuntu IDE. Он использует простой C++ без компонентов QML. Когда я пытаюсь запустить его, он не развертывается на устройстве, а работает на рабочем столе (безуспешно, сообщая, что не может найти библиотеку armhf ld), даже если я выбрал armhf SDK и на вкладке Kits мое устройство выбрано для текущего комплекта и всплывающая подсказка в левом нижнем углу показывает, что приложение будет установлено на устройстве.
Когда я открываю вкладку "Выполнить" в настройках проекта, мой проект на основе CMake отличается от проектов на основе QMake тем, что в нем есть поля "Аргументы командной строки" и "Текущий рабочий каталог", но нет "Переопределить приложение, если установлено" и "Удалить приложение". после отладки " (точный текст сейчас не помню). Исходя из этого, я заключаю, что Ubuntu IDE видит мое приложение не как Ubuntu Touch, а как Desktop. Что помечает проект на базе CMake как ориентированную на Ubuntu Touch fomr IDE?
Можно ли даже запустить проект на базе CMake без QML на устройстве? В SDK нет шаблона для этого варианта использования: все шаблоны на основе CMake используют QML, а единственный простой проект C++ (приложение QtQuick) использует QMake.
У меня нет таких проблем с проектами на основе QMake, и в настоящее время я использую CMake для создания библиотеки вместо исполняемого, а затем связываю ее с исполняемым файлом с помощью фиктивного проекта QMake. Но это похоже на клудж.
2 ответа
Хорошо, после многих экспериментов я обнаружил, что я сделал не так.
Итак, чтобы заставить Ubuntu IDE создать конфигурацию, которая запускает ваш проект на основе CMake на устройстве, все, что вам нужно, это иметь переменную UBUNTU_MANIFEST_FILE, которую нужно установить в вашем CMakeLists.txt, и она должна быть явно помечена как 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 на рабочем столе. Я думаю, что это ошибка.
Второе имя имеет имя, которое зависит от того, что вы написали в разделе "hooks" вашего файла.desktop. Если это имя совпадает с именем исполняемого файла, к этой конфигурации будет добавлено "2" (т.е. cmake_test2). Эта вторая конфигурация используется: она запускает проект на устройстве, но вы должны выбрать ее в разделе "Выполнить" на странице "Проекты" - по умолчанию выбрана неправильная конфигурация запуска.
В целом, похоже, что поддержка CMake в Ubuntu IDE все еще довольно хрупкая.
Итак, если вы используете рабочий стол Kit и cmake жалуется на то, что он не может найти инструменты armhf, возможно, вы изначально не установили cmake на рабочий стол (есть проблема с зависимостями, которые мы пытаемся решить atm) и QtCreator использует установку cmake от одного из chroot-кликов, которые вы создали для поддержки устройства.
Так что делать:
- Закрыть Ubuntu SDK IDE
- Установите cmake "apt install cmake"
- Запустите Ubuntu SDK IDE
- перейдите к: Параметры -> Build & Run и перейдите на вкладку CMake
- убедитесь, что /usr/bin/cmake выбран по умолчанию
- Откройте вкладку Kits, там выберите ваш Desktop Kit и убедитесь, что /usr/bin/cmake используется в качестве инструмента cmake.
- Удалите папки для ваших проектов и соберите заново
Нет необходимости менять наборы для устройств, так как они автоматически проверяются при каждом запуске.
Если вы хотите упаковать свой собственный проект cmake, вам нужно убедиться, что он правильно упакован для телефона. Лучше всего проверить один из оригинальных шаблонов Ubuntu SDK и посмотреть, как это делается.