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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: скопировать файлы в папку приложения после сборки  (Прочитано 7909 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« : Июнь 09, 2012, 19:51 »

Здравствуйте. Что нужно прописать в .pro, чтобы скопировать некоторые файлы/папки к собранному бинарнику? Цель: просто нажать кнопку "построить" в креаторе для релиз-сборки и все указанные файлы сами скопируются. В моём примере нужно из папки resources/translations скопировать все *.qm, а также скопировать всю папку resources/data (содержит как файлы, так и папки) за исключением папки resources/data/items. При этом структура папок должна сохраниться (т.е. выходная папка будет содержать *.exe и папку resources с необходимым содержимым). В идеале — ещё и скопировать Qt'шные дллки.

В visual studio 2010 добился этого, дописав в конец файла .vcxproj следующее:
Код:
  <Target Name="AfterBuild" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> 
    <ItemGroup>
      <QtDlls Include="$(QTDIR)\bin\QtCore4.dll;$(QTDIR)\bin\QtGui4.dll;$(QTDIR)\bin\QtNetwork4.dll" />
      <TranslationFiles Include="Resources\translations\*.qm" />
      <DataFiles Include="Resources\data\**\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(QtDlls)" DestinationFolder="$(OutDir)" />
    <Copy SourceFiles="@(TranslationFiles)" DestinationFolder="$(OutDir)Resources\translations" />
    <Copy SourceFiles="@(DataFiles)" DestinationFiles="@(DataFiles->'$(OutDir)Resources\data\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
    <RemoveDir Directories="$(OutDir)Resources\data\items" />
  </Target>

Первое, что я попробовал для .pro — это INSTALLS:
Код:
    CONFIG(release, debug|release) {
        appresources.path = $$DESTDIR
        appresources.files += resources/translations/*.qm
        appresources.files += resources/data/*
        appresources.files -= resources/data/items
        INSTALLS += appresources
    }
но после построения релиз-сборки ничего не произошло. Я знаю, что это должно срабатывать при вызове make install — тогда получается это нужно самому дописывать в настройку проекта? И понимает ли jom/nmake это?

Дальше начал гуглить и наткнулся на ещё два решения: http://stackoverflow.com/questions/3984104/qmake-how-to-copy-a-file-to-the-output (выглядит довольно ужасно) и http://stackoverflow.com/questions/3851471/including-resource-files-in-qt-creator-build-directory (совсем другое дело, но требует платформо-зависимых вызовов команд — не большая трагедия, но всё же).

Для Mac OS X есть переменная QMAKE_BUNDLE_DATA, которая должна "срабатывать" и без make install (ещё не пробовал), а в Xcode там вообще копируемые файлы настраиваются через свойства проекта.
« Последнее редактирование: Июнь 09, 2012, 19:54 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
once_again_abc
Гость
« Ответ #1 : Июнь 10, 2012, 03:32 »

странно, почему бы не использовать обычный скрипт (.bat,bash) для таких целей? например я бы написал .bat и прикрепил бы его к отдельной кнопке Tools -> External Tools.

 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Июнь 10, 2012, 03:56 »

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

кстати QMAKE_BUNDLE_DATA отрабатывает на ура, жаль только нельзя указать какие папки исключить из копирования.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Июнь 11, 2012, 13:53 »

что-то типа этого, но для mingw, т.к. используется DESTDIR_TARGET. Для вижуала надо смотреть, но общая мысль ясна (в принципе ты уже сам ответил)

Код:
# escape command to allow multiple lines in Makefile
defineReplace(mle) {
    return ( $$1$$escape_expand(\\n\\t) )
}

QMAKE_POST_LINK += $$mle(echo 1 > $${OUT_PWD}/$(DESTDIR_TARGET)/../file1.txt) # Makefile-only!
QMAKE_POST_LINK += $$mle(echo 2 > $${OUT_PWD}/$(DESTDIR_TARGET)/../file2.txt)
QMAKE_POST_LINK += $$mle(echo 3 > $${OUT_PWD}/$(DESTDIR_TARGET)/../file3.txt)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #4 : Июнь 11, 2012, 17:24 »

спасибо, попробую
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июнь 11, 2012, 17:36 »

По ходу дела смежный вопрос. OSX, Xcode. Прямолинейное помещение .dylib не помогает - ни в папку, ни в мамку (bandle). Пытался разгуглить, вроде надо устанавливать LD_xxx (не помню точно) то ли в окружении проекта то ли где. Помню делал все точно по инструкции - но .dylib никак не находился.

Если победили/разобрались - напишите как. Хотя сиюминутной необходимости нет, это знать полезно

Спасибо
« Последнее редактирование: Июнь 11, 2012, 17:57 от Igors » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #6 : Июнь 11, 2012, 17:51 »

если не ошибаюсь, то нужно использовать install_name_tool для привязки библиотек к бинаринку (сам лично не пользовался). недавно кто-то (кажется ecspertiza) уже задавал вопрос по этому поводу.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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