lrelease и make install



  • Описываю установку через сам qmake. Вышел затык с переводами.

    Сами переводы (qm) формируются распространенным методом

    isEmpty(QMAKE_LRELEASE) {
        win32|os2:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe
        else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
        unix {
            !exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease-qt5 }
        } else {
            !exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease }
        }
    }
    
    !win32 {
      system($${QMAKE_LRELEASE} -silent $${_PRO_FILE_} 2> /dev/null)
    }
    win32 {
      system($${QMAKE_LRELEASE} $${_PRO_FILE_})
    }
    
    updateqm.input = TRANSLATIONS
    updateqm.output = langs/${QMAKE_FILE_BASE}.qm
    updateqm.commands = $$QMAKE_LRELEASE -silent ${QMAKE_FILE_IN} -qm langs/${QMAKE_FILE_BASE}.qm
    updateqm.CONFIG += no_link target_predeps
    QMAKE_EXTRA_COMPILERS += updateqm
    

    Далее происходит установка

    data_langs.path = /usr/share/myprog/langs/
    data_langs.files = langs/*.qm
    INSTALLS += data_langs
    

    Но qmake -d показывает

    DEBUG 1: /usr/lib64/qt5/mkspecs/features/moc.prf:63: flow control statement 'return', aborting block
    DEBUG 1: /builddir/build/BUILD/qtbase-everywhere-src-5.12.3/qmake/generators/makefile.cpp:321 Failure to find Bin/myprog in vpath ()
    DEBUG 1: /builddir/build/BUILD/qtbase-everywhere-src-5.12.3/qmake/generators/makefile.cpp:321 Failure to find langs/*.qm in vpath ()
    DEBUG 1: no definition for install data_langs: install target not created
    

    т.е. выполнение updateqm происходит после того как формируется target data_langs. Как это поправить ?



  • Какая разница в каком порядке в qmake цели обрабатываютя, главное в каком порядке их make выполняет, что определяется зависимостями



  • @konstantin-tokarev, я пробовал добавлять

    data_langs.prepend = updateqm
    

    т.е. в моем понимании, data_langs зависит от updateqm. Но это не дало эффекту. Как правильно сделать ?



  • @admsasha said in lrelease и make install:

    @konstantin-tokarev, я пробовал добавлять

    data_langs.prepend = updateqm
    

    Что такое perepends? depends знаю, prepends не знаю.



  • Вообще в таких ситуация надо makefile смотреть, есть ли нужная зависмость на цели или нет. Если нет, значит ошибка в использовании qmake



  • @konstantin-tokarev, Писал по памяти. depends конечно же.



  • @konstantin-tokarev, ее нету. Я и спрашиваю. Как правильно указать в qmake что файлы создаются после updateqm, и то что их сейчас нет, это нормально.



  • Пардон, невнимательно прочитал вопрос.

    1. updateqm - это не цель, а компилятор, а зваисимость должна быть от целей, то есть собранных qm файлов.
    2. Выражение langs/*.qm не работает, так как в момент выполнения qmake этих файлов еще не существует - должен быть список имен файлов звездочек.


  • @konstantin-tokarev, точное имя тоже ставил. Так же выводит сообщение, что файла нет. Но если до команды qmake создать этот файл (например, myprog_ru.qm) то qmake его видит и устанавливает.
    или так можно

    qmake
    make <-- тут создаются *.qm
    qmake <-- теперь qmake их видит
    make install
    

    Но понятно, что это не выход



  • Тогда наверное придется вместо data_langs.files делать data_langs.extra и писать команду компирования вручную, через $$QMAKE_COPY например



  • @konstantin-tokarev, тоже не вариант. Тогда при первом же qmake будет попытка установить языки, что в обычном случае постоянно будет вываливаться ошибкой (для обыкновенного пользователя, /usr/share не доступен). Нужна установка только при make install.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.