Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: voral от Июль 24, 2013, 15:50



Название: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: voral от Июль 24, 2013, 15:50
Толи меня забанили в гугле, толи я ответ не нашел под носом. В никсах все ок, а вот в винде взрыв мозга. Проблема, как я понял, с пробелами в пути. Итак поступаю следующим образом в pro файле
Код:
win32 {
    isEmpty(PREFIX)
    {
      PREFIX=\"c:\\Program Files\\MyApp\"
    }
    target.path = $$quote(\"$$PREFIX\")
    help.path = $$PREFIX\\help
    help.files = src/help/*.html
}
INSTALLS += target help
В Makefile соответственно появляется команда копирования, но целевой путь не в кавычках и с пробелом. Соответсвенно копирование не идет.. Уж как только не игрался я с кавычками - ни судьба.

Пошел другим путем
Код:
win32 {
    isEmpty(PREFIX)
    {
      PREFIX=\"c:\\Program Files\\MyApp\"
    }
    target.path = $$quote(\"$$PREFIX\")
    target.depends += copy_lang
    copy_lang.target = copy_lang
    copy_lang.commands = $(MKDIR) $$PREFIX\\lang\\ && $(COPY) \"$$DESTDIR\\lang\\*.qm\" \"c:\\Program Files\\qtDbf\\lang\\\"
    QMAKE_EXTRA_TARGETS += copy_lang
}

Если целевая директория пуста. Все ок. Но если там уже есть поддиректория lang то ошибка и дальше не идет установка.


Пробовал в первом варианте прописывать не четкий путь а %ProgramFiles% что, вроде правильнее, но тогда в путях (в MakeFile)сначала добавляется текущий путь а потом '%ProgramFiles%'.....

Как быть?


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: ViTech от Июль 24, 2013, 16:58
Цитировать
copy_lang.commands = $(MKDIR) $$PREFIX\\lang\\ && $(COPY) \"$$DESTDIR\\lang\\*.qm\" \"c:\\Program Files\\qtDbf\\lang\\\"
Возможно из-за $(MKDIR) && $(COPY)? Может по другому надо команды соединить? Using multiple commands and conditional processing symbols (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true).


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: voral от Июль 24, 2013, 17:32
Цитировать
copy_lang.commands = $(MKDIR) $$PREFIX\\lang\\ && $(COPY) \"$$DESTDIR\\lang\\*.qm\" \"c:\\Program Files\\qtDbf\\lang\\\"
Возможно из-за $(MKDIR) && $(COPY)? Может по другому надо команды соединить? Using multiple commands and conditional processing symbols (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true).
Это я пробовал... Но вы навели на другую мысль - я совсем забыл о существовании xcopy она вроде поумнее.....


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: Alex Custov от Июль 24, 2013, 17:51
Если целевая директория пуста. Все ок. Но если там уже есть поддиректория lang то ошибка и дальше не идет установка.

Проверяй на существование с помощью if exists


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: twp от Июль 24, 2013, 19:47
$(MKDIR) и $(COPY) - это самописные переменные для команд mkdir и copy? В qmake есть недокументированные переменные для этих команд, которые работают для любой ОС. И как написали выше, надо проверять существование каталога. Т.е. можно использовать что-то типа такого:
Код
copy_lang.commands = $$QMAKE_CHK_DIR_EXISTS $$PREFIX\\lang\\ $$QMAKE_MKDIR $$PREFIX\\lang\\ && $$QMAKE_COPY \"$$DESTDIR\\lang\\*.qm\" \"c:\\Program Files\\qtDbf\\lang\\\"
 
и можно вывести команду на консоль, чтоб не смотреть Makefile
Код
message($$copy_lang.commands)
 


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: voral от Июль 25, 2013, 08:08
$(MKDIR) и $(COPY) - это самописные переменные для команд mkdir и copy? В qmake есть недокументированные переменные для этих команд, которые работают для любой ОС. И как написали выше, надо проверять существование каталога. Т.е. можно использовать что-то типа такого:
..
и можно вывести команду на консоль, чтоб не смотреть Makefile
...
Не не самописные. Как раз это есть те переменные из доки...
Попробую


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: twp от Июль 25, 2013, 10:39
а с какой доки? В ассистенте такого нет. А если выводить на консоль через message($$copy_lang.commands) то я получаю
Цитировать
Project MESSAGE:  "c:\Program Files\MyApp"\lang\ &&  "\lang\*.qm" "c:\Program Files\qtDbf\lang\"
По идее надо было просто указать команды без $()
Код
copy_lang.commands = MKDIR $$PREFIX\\lang\\ && COPY \"$$DESTDIR\\lang\\*.qm\" \"c:\\Program Files\\qtDbf\\lang\\\"
 


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: voral от Июль 25, 2013, 11:41
а с какой доки? В ассистенте такого нет. А если выводить на консоль через message($$copy_lang.commands) то я получаю
Я вчера столько перелопатил. Упоминаний было много где я и не сохранил в закладки. Вот только нагуглил одну из вчерашних статей http://blog.mgsxx.com/?p=2046
Параграф: "Полезные переменные в Makefile"

Так что, message и не должно показывать


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: voral от Июль 25, 2013, 11:44
Продолжение моей истории как грамотно скопировать нужные либы (естественно на Windows системах). Правда если для Qt-шных либ есть надежда автоматом в pro файле найти путь установки Qt. А вот либы связанные с компилятором..... :(


Название: Re: Qt 4.7 :: pro-файл :: секция install для Windows
Отправлено: twp от Июль 25, 2013, 13:37
Я вчера столько перелопатил. Упоминаний было много где я и не сохранил в закладки. Вот только нагуглил одну из вчерашних статей http://blog.mgsxx.com/?p=2046
Параграф: "Полезные переменные в Makefile"

Так что, message и не должно показывать
А, тогда понятно.