Russian Qt Forum
Ноябрь 01, 2024, 21:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.7 :: pro-файл :: секция install для Windows  (Прочитано 6251 раз)
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%'.....

Как быть?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Июль 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.
Записан

Пока сам не сделаешь...
voral
Гость
« Ответ #2 : Июль 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.
Это я пробовал... Но вы навели на другую мысль - я совсем забыл о существовании xcopy она вроде поумнее.....
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Июль 24, 2013, 17:51 »

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

Проверяй на существование с помощью if exists
Записан
twp
Гость
« Ответ #4 : Июль 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)
 
Записан
voral
Гость
« Ответ #5 : Июль 25, 2013, 08:08 »

$(MKDIR) и $(COPY) - это самописные переменные для команд mkdir и copy? В qmake есть недокументированные переменные для этих команд, которые работают для любой ОС. И как написали выше, надо проверять существование каталога. Т.е. можно использовать что-то типа такого:
..
и можно вывести команду на консоль, чтоб не смотреть Makefile
...
Не не самописные. Как раз это есть те переменные из доки...
Попробую
Записан
twp
Гость
« Ответ #6 : Июль 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\\\"
 
Записан
voral
Гость
« Ответ #7 : Июль 25, 2013, 11:41 »

а с какой доки? В ассистенте такого нет. А если выводить на консоль через message($$copy_lang.commands) то я получаю
Я вчера столько перелопатил. Упоминаний было много где я и не сохранил в закладки. Вот только нагуглил одну из вчерашних статей http://blog.mgsxx.com/?p=2046
Параграф: "Полезные переменные в Makefile"

Так что, message и не должно показывать
Записан
voral
Гость
« Ответ #8 : Июль 25, 2013, 11:44 »

Продолжение моей истории как грамотно скопировать нужные либы (естественно на Windows системах). Правда если для Qt-шных либ есть надежда автоматом в pro файле найти путь установки Qt. А вот либы связанные с компилятором..... Грустный
Записан
twp
Гость
« Ответ #9 : Июль 25, 2013, 13:37 »

Я вчера столько перелопатил. Упоминаний было много где я и не сохранил в закладки. Вот только нагуглил одну из вчерашних статей http://blog.mgsxx.com/?p=2046
Параграф: "Полезные переменные в Makefile"

Так что, message и не должно показывать
А, тогда понятно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 26.