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. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
QML - Tutorial 035. Using enumerations in QML without 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++ - Lesson 052. Customization Qt Audio player in the style of 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…
Heap sorting algorithm The role of raloxifene in preventing breast cancer priligy precio
PyQt5 - Lesson 006. Work with QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
Now discuss on the forum
добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
Всё ещё разбираюсь с кешем. 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
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь МаксимовOct. 3, 2024, 4:05 a.m.
Первое, что бросается в глаза, так это то, что не всю копипасту переправили. Посмотрите внимательно на этот участок кода, да и вообще весь проект внимательно пересмотрите.
Ещё как вариант, может быть проблема с переменной 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 чудит. Но у меня мыслей нет на этот счёт.
Понятно. Спасибо.