grig_pMarch 31, 2017, 7:38 a.m.
Вопрос по статье "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>
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 12, 2024, 1:58 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 11:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 11:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Evgenii LegotckoiNov. 1, 2024, 12:37 a.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовOct. 5, 2024, 5:51 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Now discuss on the forum
Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Nov. 15, 2024, 5:04 p.m.
NSProjectJune 4, 2022, 1:49 p.m.
IscanderCheNov. 1, 2024, 1:43 a.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Первое, что бросается в глаза, так это то, что не всю копипасту переправили. Посмотрите внимательно на этот участок кода, да и вообще весь проект внимательно пересмотрите.
Ещё как вариант, может быть проблема с переменной 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 чудит. Но у меня мыслей нет на этот счёт.
Понятно. Спасибо.