grig_p31 марта 2017 г. 7:38
Вопрос по статье "Qt WinAPI - Урок 004. QtIFW ..." Ошибка в copydata
Здравствуйте! Создал проект с поддиректориями "Проект + инсталлятор", как показано в статье: https://evileg.com/post/164/ Но при сборке инсталлятора возникает ошибка [copydata] Error 4 Что это и куда копать? Вот мой код Installer.pro:
TEMPLATE = aux # В зависимости от режима сборки, определяем, куда именно будут собираться инсталляторы CONFIG(debug, debug|release) { INSTALLER_OFFLINE = $$OUT_PWD/../../TSInstallerDebug/TreeStorage.offline INSTALLER_ONLINE = $$OUT_PWD/../../TSInstallerDebug/TreeStorage.online DESTDIR_WIN = $$PWD/packages/ru.ntcmks.treestorage/data DESTDIR_WIN ~= s,/,\\,g PWD_WIN = $$OUT_PWD/../../TreeStorageDebug PWD_WIN ~= s,/,\\,g copydata.commands = $(COPY_DIR) $$PWD_WIN $$DESTDIR_WIN first.depends = $(first) copydata export(first.depends) export(copydata.commands) QMAKE_EXTRA_TARGETS += first copydata } else { # Задаём переменные, которые будут содержать пути с названиями инсталляторов INSTALLER_OFFLINE = $$OUT_PWD/../../TSInstallerRelease/TreeStorage.offline INSTALLER_ONLINE = $$OUT_PWD/../../TSInstallerRelease/TreeStorage.online # Задаём переменную, которая должна содержать путь к папке с данными DESTDIR_WIN = $$PWD/packages/ru.ntcmks.treestorage/data DESTDIR_WIN ~= s,/,\\,g # Задаём путь откуда всё приложение с DLL-ками нужно будет скопировать PWD_WIN = $$OUT_PWD/../../TreeStorageRelease PWD_WIN ~= s,/,\\,g # Прежде, чем выполнять сборку инсталляторов, необходимо скопировать файлы # из выходной папки проекта вместе со всеми DLL в папку data, которая относится # к собираемому пакету copydata.commands = $(COPY_DIR) $$PWD_WIN $$DESTDIR_WIN first.depends = $(first) copydata export(first.depends) export(copydata.commands) # задаём кастомную цель сборки, при которой сначала выполним компирование файлов # а потом уже и остальное, что следует по скрипту QMake QMAKE_EXTRA_TARGETS += first copydata } # Создаём цель по сборке Оффлайн Инсталлятора INPUT = $$PWD/config/config.xml $$PWD/packages offlineInstaller.depends = copydata offlineInstaller.input = INPUT offlineInstaller.output = $$INSTALLER_OFFLINE offlineInstaller.commands = $$(QTDIR)/../../QtIFW2.0.5/bin/binarycreator --offline-only -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT} offlineInstaller.CONFIG += target_predeps no_link combine QMAKE_EXTRA_COMPILERS += offlineInstaller # Создаём цель по сборке Онлайн Инсталлятора INPUT = $$PWD/config/config.xml $$PWD/packages onlineInstaller.depends = copydata onlineInstaller.input = INPUT onlineInstaller.output = $$INSTALLER_ONLINE onlineInstaller.commands = $$(QTDIR)/../../QtIFW2.0.5/bin/binarycreator --online-only -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT} onlineInstaller.CONFIG += target_predeps no_link combine QMAKE_EXTRA_COMPILERS += onlineInstaller # репозиторий будем собирать только в случае режима release CONFIG(release, debug|release) { # Сборку репозитория производим после того, как были собраны Инсталляторы # Для этого воспользуемся QMAKE_POST_LINK вместо QMAKE_EXTRA_COMPILERS # Поскольку он хорошо для этого подходит QMAKE_POST_LINK += $$(QTDIR)/../../QtIFW2.0.5/bin/repogen -p $$PWD/packages -i ru.evileg.helloinstaller --update $$OUT_PWD/../../repository } DISTFILES += \ config/config.xml \ packages/com.ntcmks.treestorage/meta/package.xmlconfig.xml:
<?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>TreeStorage</Name> <Version>1.0.0</Version> <Title>1.0.0 TreeStorage Installer</Title> <Publisher>NtcMks</Publisher> <StartMenuDir>TreeStorage</StartMenuDir> <TargetDir>@TargetDir@/TreeStorage</TargetDir> <AllowSpaceInPath>true</AllowSpaceInPath> <RemoteRepositories> <Repository> <Url>http://www.ntcmks.ru/software/TreeStorage/</Url> </Repository> </RemoteRepositories> </Installer>package.xml:
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>Приложение TreeStorage</DisplayName> <Description>Приложение TreeStorage</Description> <Version>0.1.0</Version> <ReleaseDate>2017-03-30</ReleaseDate> <Default>true</Default> <Name>com.ntcmks.treestorage</name> <ForcedInstallation>true</ForcedInstallation> <RequiresAdminRights>true</RequiresAdminRights> </Package>
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Сейчас обсуждают на форуме
добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderChe31 октября 2024 г. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3 октября 2024 г. 4:05
Первое, что бросается в глаза, так это то, что не всю копипасту переправили. Посмотрите внимательно на этот участок кода, да и вообще весь проект внимательно пересмотрите.
Ещё как вариант, может быть проблема с переменной QTDIR , если она не установлена в путях операционной системы. Ищите в настройках системы переменные среды (PATH) и проверьте, есть ли там QTDIR.
Спасибо за ответ. Копипасту поправил.
Посмотрел пути $$OUT_PWD Но выяснилось, что правильными путями оказались не PWD_WIN = $$OUT_PWD/../../TreeStorageDebug, а PWD_WIN = $$OUT_PWD/../TreeStorageDebug
Поправил. Ошибка ушла.
Но появилась другая: :-1: ошибка: [../TSInstallerDebug/TreeStorage.offline] Error 1
Вставил в TSInstaller.pro message($$(QTDIR)/../../QtIFW2.0.5/bin/repogen)
Выдало в сообщениях :Project MESSAGE: D:\QT\5.8\mingw53_32/../../QtIFW2.0.5/bin/repogen
В настройках Qt в переменная QTDIR настроена правильно Заранее спасибо за совет
Относительно правильности путей, то это уже вопрос к структуре проекта.
Что касается ошибки, то а где именно установлен QtIFW ? Пути совпадают? Или всё-таки нет?
Спасибо за ответ! Пути, похоже, все на месте. При сборке ошибка звучит так: :-1: ошибка: [../TSInstallerDebug/TreeStorage.offline] Error 1 Пытаюсь вывести: error($$INSTALLER_OFFLINE) Выводит: :-1: ошибка: D:\Grig\QTProjects\TreeStorageDeploy\build-TreeStorageDeploy-Desktop_Qt_5_8_0_MinGW_32bit-Debug\TSInstaller\..\TSInstallerDebug\TreeStorage.offline Папка ...\TSInstallerDebug\ имеется. TreeStorage.offline отсутствует QT установлен на D диске D:\QT QtIFW установлен внутри папки QT: D:\QT\QtIFW2.0.5 Путь $$(QTDIR)/../../QtIFW2.0.5/bin/binarycreator указывает правильно Заранее благодарен за помощь. Прикрепил проект и структуру папок.
Структура проекта несколько отличается от той, что я привёл в качестве примера в статье. Я имею ввиду структуру subdirs. Поэтому и были косяки с путями изначально.
Что касается этой ошибки [../TSInstallerDebug/TreeStorage.offline] Error 1 , то ума не приложу, в чём причина. Я перепилил ваш проект так, что он стал идентичен тому, что приводится в качестве примера. Но мой проект, в отличие от вашего компилируется, собирает все инсталляторы и нормально работает.
Единственное, что могу предположить, что какой-то косяк в кодировке файла и присутствует битый символ, который или не виден или идентичен русскому символу, чаще всего это буква С . Я таким сталкивался, но не в ситуации с инсталляторами. Лечение проблемы было весьма топорным, пересоздать проект заново... Благо это было на раннем этапе.
Скачайте из статьи пример с инсталляторами (в конце статьи). Там была проблема со скачиванием, но я её пофиксил (права на чтение у файла отсутствовали)
Спасибо. Ваш проект скачал. Попробую.
Прошу прощения за поздний ответ. Был занят. Смог попробовать только сейчас. Взял Ваш проект. Ничего не меняя попытался собрать. Hello собрался без ошибок. А вот Installer выдает примерно то же самое, что у меня: :-1: ошибка: [../../InstallerDebug/Hello.offline] Error 2
У вас какой Qt installer Framework установлен? У меня тот проект писался под QtIFW2.0.3, возможно, нужно поменять версию в installer.pro . Там в трёх строчках.
Спасибо. Поменял путь и получилось.
Здравствуйте!
наОзадачился созданием online инсталляторов.
Я так понял, что при сборке в режиме release должны создаваться инсталляторы для режима release в папке InstallerRelease и репозиторий в папке repository на том же уровне, что и папка InstallerRelease. Я прав?
У меня создаются файлы Hello.offline.exe и Hello.online.exe в папке InstallerRelease, а папка repository не создается ни на одном уровне с InstallerRelease, ни на каком другом.
Проект использую HelloInstaller.
Заменил в коде Installer.pro
Репозиторий создается, как надо.
В чем может быть проблема?
Больше ничего не меняли в коде? Например, url определение пакета? -> (ru.evileg.helloinstaller)
менял только номер версии QtIFW с 2.0.3 на 2.0.5
Кстати, у меня в вопросе написано с ошибкой в пути.
Вместо QtIFW2.0.5 написано QtIFW_2.0.5 Но в этом случае должна быть ошибка сборки, а она не возникает, собирается нормально.
А в коде как написано? Также с нижним подчёркиванием? Если так, то вполне возможно, что из-за этого и не работает.
В коде не работает как с подчеркиванием, так и без него. Причем, с подчеркиванием даже не сообщает об ошибке.
Вообще странно, должно работать. Разве только сам QMAKE чудит. Но у меня мыслей нет на этот счёт.
Понятно. Спасибо.