Arrow
Ақп. 16, 2017, 8:25 Т.Қ.

Опции qmake

qmake, pro, QT

Хочется заставить Qt Creator автоматически вызывать программу windeployqt для release-версии программы. Пробовал в файл *.pro добавить следующее:

CONFIG(debug, debug|release) {
    # debug-версия
} else {
    # release-версия
    win32: {
        # Папка для release-версии программы
        DESTDIR = $${_PRO_FILE_PWD_}/win32
        # Запуск windeployqt
        QMAKE_POST_LINK += windeployqt $$PWD/win32/$$TARGET
    }
    unix: {
        # Папка для release-версии программы
        DESTDIR = $${_PRO_FILE_PWD_}/linux
        # Запуск linuxdeployqt
        QMAKE_POST_LINK += linuxdeployqt $$PWD/linux/$$TARGET
    }
}

Пишет:

:-1: ошибка: [..\..\win32\FileExplorer.exe] Error 1

Я так понимаю ему нужен полный путь к файлу, а он его не получает, хотя в справке написано так:

PWD This variable contains the full path leading to the directory where the qmake project file (project.pro) is located.
Подскажите как такое можно реализовать, что ему указать для этого?
2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

20
Evgenii Legotckoi
  • Ақп. 16, 2017, 11:01 Т.Қ.

PWD указывает полный путь к самому проекту. Лучше использовать OUT_PWD , которая указывает путь, куда кладётся makefile и остальные выходные файлы проекта. И уже отталкиваться от неё. windeployqt можно применять к папке, в которой находится выходной бинарник, думаю, что и для linuxdeployqt может отрабатывать аналогичным образом.

А ещё я бы применил полный путь к windeployqt. Он же не прописывается в пути операционной системы.

То есть запись будет примерно так выглядеть:

QMAKE_POST_LINK = $$(QTDIR)/bin/windeployqt $$OUT_PWD/../../HelloDebug

Кажется, я уже давал ссылку на статью с автоматизацией сборки , но тем не менее.

windeployqt же применяется к уже собранному бинарнику, поэтому лучше будет отталкиваться от пути к той папке, куда всё собирается.

    Arrow
    • Ақп. 17, 2017, 12:48 Т.Ж.

    Проверил на Linux - ошибка такая же.

      Arrow
      • Ақп. 17, 2017, 12:56 Т.Ж.

      В Windows 7 такой же результат.

        Evgenii Legotckoi
        • Ақп. 17, 2017, 10:15 Т.Ж.

        А если убрать переменную $$TARGET из пути? Просто путь к папке? В TARGET же содержится просто имя проекта, без расширения. Возможно windeployqt считает в данном случае TARGET директорией, а не исполняемым файлом, поэтому и выдаёт эту ошибку.

          Evgenii Legotckoi
          • Ақп. 17, 2017, 10:16 Т.Ж.

          В моём же варианте указан путь к директории, а не к непосредственно исполняемому файлу, да и слеша нет. У Вас тот же самый вариант получается, так что... скорее всего так и есть, windeployqt думает, что это директория, а не исполняемый файл.

            Arrow
            • Ақп. 17, 2017, 2:14 Т.Қ.

            Попробовал так:

            QMAKE_POST_LINK += windeployqt $$PWD/win32

            все равно пишет:

            :-1: ошибка: [..\..\win32\FileExplorer.exe] Error 1
              Arrow
              • Ақп. 17, 2017, 2:16 Т.Қ.

              И так:

              $$(QTDIR)/bin/windeployqt $$PWD/win32

              ошибка постоянно одна.

                Arrow
                • Ақп. 17, 2017, 2:22 Т.Қ.

                Пробовал передать ему путь так:

                $$(QTDIR)/bin/windeployqt "D:/project/win32"

                все равно ошибка не меняется.

                Не могу понять что не так и почему он путь в ошибке не меняет?

                  Arrow
                  • Ақп. 17, 2017, 2:28 Т.Қ.

                  На пустой проект тоже ругается.

                    Evgenii Legotckoi
                    • Ақп. 17, 2017, 2:34 Т.Қ.

                    Понятия тогда не имею. Если ругается на пустой проект, то больше похоже на локальную проблему непосредственно с ОС. Может быть повреждённые записи реестра.

                    Проверил на Linux - ошибка такая же.
                    А при чём здесь Linux? С чего вообще там должна быть ошибка, связанная с FileExplorer.exe ?
                      Arrow
                      • Ақп. 17, 2017, 3:56 Т.Қ.

                      FileExplorer.exe - название выходного исполняемого файла

                        Evgenii Legotckoi
                        • Ақп. 17, 2017, 4:04 Т.Қ.

                        Весь профайл смотреть нужно.

                          Arrow
                          • Ақп. 17, 2017, 5:11 Т.Қ.
                          • Жауап шешім ретінде белгіленді.

                          В профайле написано следующее:

                          #-------------------------------------------------
                          #
                          # Project created by QtCreator 2017-01-25T17:31:37
                          #
                          #-------------------------------------------------
                          
                          QT       += core gui
                          
                          greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                          
                          TARGET = FileExplorer
                          TEMPLATE = app
                          
                          SOURCES += main.cpp\
                                  mainwindow.cpp \
                              stylehelper.cpp \
                              inlog.cpp\
                              sys.cpp
                          
                          HEADERS  += mainwindow.h \
                              stylehelper.h \
                              inlog.h\
                              sys.h
                          
                          FORMS    += mainwindow.ui \
                              inlog.ui
                          
                          win32: RC_ICONS = $$PWD/pict/ico.ico
                          
                          RESOURCES += \
                              res.qrc
                          
                          CONFIG(debug, debug|release) {
                              win32: LIBS += -L$$PWD/lib/ -lfsys
                              unix: LIBS += -L$$PWD/lib/ -L. -lfsys -Wl,-rpath,lib -Wl,-rpath,.
                          } else {
                              win32: {
                                  LIBS += -L$$PWD/lib/ -lfsys
                                  DESTDIR = $${_PRO_FILE_PWD_}/win32
                                  QMAKE_POST_LINK += windeployqt $$PWD/win32
                              }
                              unix: {
                                  LIBS += -L$$PWD/lib/ -L. -lfsys -Wl,-rpath,lib -Wl,-rpath,.
                                  DESTDIR = $${_PRO_FILE_PWD_}/linux
                                  QMAKE_POST_LINK += linuxdeployqt $$PWD/linux
                              }
                          }
                          
                          INCLUDEPATH += $$PWD/include
                          DEPENDPATH += $$PWD/include
                            Evgenii Legotckoi
                            • Ақп. 17, 2017, 5:35 Т.Қ.

                            Смотрю я на это дело. И даже мыслей никаких нет. Всё правильно. Должно работать.
                            Остаётся только то, что что-то не так в переменных PATH или в реестре, действительно проблема с ОС.

                            Сюда же в процессе сборки бинарник складывается?

                            DESTDIR = $${_PRO_FILE_PWD_}/win32
                              Arrow
                              • Ақп. 17, 2017, 6:50 Т.Қ.

                              Да, для Windows в DESTDIR = $${_PRO_FILE_PWD_}/win32, для Linux в DESTDIR = $${_PRO_FILE_PWD_}/linux

                                Arrow
                                • Ақп. 17, 2017, 6:53 Т.Қ.

                                Бинарник после сборки оказывается в папке как и должно быть, а windeployqt выдает ошибку. Если windeployqt запустить отдельно (вне Qt Creator) и передать ему путь к папке, то все отлично работает.

                                  Evgenii Legotckoi
                                  • Ақп. 17, 2017, 7:09 Т.Қ.

                                  Ок. Тогда так:

                                  QMAKE_POST_LINK += D:/path/to/windeployqt $$PWD/win32

                                  Больше идей нет.

                                    Arrow
                                    • Ақп. 17, 2017, 9:25 Т.Қ.

                                    Результат тот же. Похоже придется как всегда ручками :)(

                                      Evgenii Legotckoi
                                      • Ақп. 17, 2017, 9:34 Т.Қ.

                                      Это нехорошо, что не работает. Должно работать, но я понятия не имею уже, в чём может быть причина. Остаются только внешние факторы, неверные переменные в реестре или ещё что-либо в этом роде. Но не похоже, что это относится к коду в pro файле.

                                      Могу только пожелать успешного разрешения этой проблемы при дальнейшей работе.

                                        Arrow
                                        • Ақп. 18, 2017, 2:11 Т.Ж.

                                        Спасибо! Если удастся решить проблему отпишусь, как получилось.

                                          Пікірлер

                                          Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                          Кіріңіз немесе Тіркеліңіз