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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Удаление и копирование файлов при сборке сложного проекта  (Прочитано 9471 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Ноябрь 26, 2014, 16:40 »

При сборке проекта (в любом месте, можно в конце) надо удалять копии одних целевых файлов сборки (буквально TARGET, но с добавлением числового префикса к имени) и создавать автоматически копии других, тоже с добавлением префиксов. Читал, как это делается в файле проекта, чего-то написал, но оно не заработало, потому что макроимена оказались не определены. Кто-нибудь может показать похожие действия в своих файлах проектов? Речь именно о создании копий и удалении почти одноименных целевой сборке. Собираются динамические библиотеки, соответственно, файлы должны иметь правильные суффиксы в разных ОС. Ковырять варианты сейчас нет возможности - надо делать сам проект, там вагон работы. Плз, подскажите варианты правильных строк для файла проекта, а то сейчас при каждой отладочной сборке приходится все файлы (до 8 штук) удалять и копировать вручную.
Записан

2^7-1 == 127, задумайтесь...
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Ноябрь 26, 2014, 18:32 »

Я сильно над файлами проекта не издеваюсь. Если мне нужны дополнительные действия после сборки - пишу батничек.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Ноябрь 26, 2014, 19:01 »

Я сильно над файлами проекта не издеваюсь. Если мне нужны дополнительные действия после сборки - пишу батничек.

этот вариант не приемлем - для всех целевых ОС батнички придется писать, хотя всё по идее, в проекте можно сделать, но что-то не получается, переменные оказываются пустыми
Записан

2^7-1 == 127, задумайтесь...
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #3 : Ноябрь 26, 2014, 20:35 »

этот вариант не приемлем - для всех целевых ОС батнички придется писать, хотя всё по идее, в проекте можно сделать, но что-то не получается, переменные оказываются пустыми
Да, для разных платформ прийдется писать свои батнички, или использовать какой-нить скриптовый язык (Python например). Но и для проектного файла вам надо будет писать врианты для разных OS, потому как удаление файла система сборики не делает сама, она для этого использует системные команды. Тоже касается и переименования.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Ноябрь 26, 2014, 21:24 »

Да, для разных платформ прийдется писать свои батнички, или использовать какой-нить скриптовый язык (Python например). Но и для проектного файла вам надо будет писать врианты для разных OS, потому как удаление файла система сборики не делает сама, она для этого использует системные команды. Тоже касается и переименования.

Ничего не придётся писать, если всё сделать в файле проекта. Там команды ОС автоматически настраиваются, ну да ладно. Проблема не в этом. Я не могу  получить имена выходных файлов, но сама команда генерится правильно.

Собственно, я застрял на этом

Код:
QMAKE_POST_LINK = $$QMAKE_COPY $$DESTDIR/$$(TARGET).$$(TARGET_EXT) "$$DESTDIR/1_$$(TARGET).$$(TARGET_EXT)"

что генерит команду

Код:
copy /y ../mydir/. ../mydir/1_.

то есть, почему-то TARGET_EXT и даже TARGET оказываются пустыми, хотя в начале проекта написано

Код:
TARGET = cicontrol
TEMPLATE = lib

Вот и вопрос - что я сделал неправильно, и как сделать правильно? Просьба ответить тем, кто точно знает ответ.
 
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 27, 2014, 11:47 »

Просьба ответить тем, кто точно знает ответ.
Ответ точно не знаю. т.к. не работаю с Creator. Но месяца 2 назад тоже долбался со скрипами в др IDE. Оказалось после доллара нужны фигурные скобки, а я недоглядел и лепил круглые
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Ноябрь 27, 2014, 12:00 »

А-ха... таким макаром TARGET-имя оно подставило, но TARGET_EXT нифига. Вопрос меняется следующим образом - как правильно в файле проекта получить расширение для создаваемой динамической библиотеки, при том, что включено TEMPLATE=lib?
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 27, 2014, 13:08 »

Да, и у меня дело пошло намного быстрее когда я научился печатать переменные
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Ноябрь 27, 2014, 13:35 »

Мы в serial port (для Qt4) используем что-то типа такого:

Код:
TARGET = $$qtLibraryTarget(QtSerialPort$$QT_LIBINFIX)

но вроде оно не для расширения. Возможно есть еще какой-то макрос для указания расширения.. Я не в курсе.

ЗЫ: Проше все переписать на QBS Улыбающийся

« Последнее редактирование: Ноябрь 27, 2014, 13:45 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #9 : Ноябрь 27, 2014, 13:49 »

Мы в serial port (для Qt4) используем что-то типа такого:

Код:
TARGET = $$qtLibraryTarget(QtSerialPort$$QT_LIBINFIX)

но вроде оно не для расширения. Возможно есть еще какой-то макрос для указания расширения.. Я не в курсе.

ЗЫ: Проше все переписать на QBS Улыбающийся

Сейчас уже не проще, и вообще не с руки менять инструментарий. Проще всего руками копировать и удалять, хотя это доставляет.
Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Ноябрь 27, 2014, 13:56 »

почему переменные в скобках? там просто два доллара и имя
Записан

Изучением 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
vregess
Гость
« Ответ #11 : Ноябрь 27, 2014, 14:15 »

Не особо разбираюсь в qmake, да и стараюсь его стороной обходить, если возможно, но судя по документации TARGET_EXT предназначен для переопределения системного расширения, т.е. если значение пустое, то используется расширение по дефолту.

Можно либо самому создавать переменную с расширением, в зависимости от платформы:
Код:
win32 {
  EXT=..
}
unix {
  EXT=..
}

либо попробовать custom targets, там вроде можно узнать расширение.
Код:
mytarget.input = QMAKE_TARGET
mytarget.output = ${QMAKE_FILE_IN_BASE}_1${QMAKE_FILE_EXT}
mytarget.commands = copy /y ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
mytarget.depends = ${TARGET}
QMAKE_EXTRA_TARGETS += mytarget

не совсем уверен, как прописать .input - устанавливает переменную, которая содержит входной файл (абсолютный путь) и .depends - таргет, от которого зависит mytarget, должен указывать на цель, которая собирает библиотеку.

Затем по идее можно собирать make mytarget. Сначала скомпилится библиотека, а потом должен запуститься mytarget.

Тут подробнее http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake + документация qmake (Adding Custom Targets).

PS если это финальный шаг перед деплоем, то вполне можно написать скрипт, который сконфигурирует и соберет проект, а потом сделает все дополнительные шаги. Я для обычно qmake-проект использую просто для сборки, а все остальное переношу в скрипт на питоне, который распихает файлы, куда надо, переименует и запакует.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #12 : Ноябрь 27, 2014, 16:07 »

почему переменные в скобках? там просто два доллара и имя

Да я как только не пробовал... Без разницы. Также точно пусто вместо них в командной строке.
« Последнее редактирование: Ноябрь 27, 2014, 16:14 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #13 : Ноябрь 27, 2014, 16:12 »

Можно либо самому создавать переменную с расширением, в зависимости от платформы:

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

В undcumented про расширение target ничего не нашёл. Только про input.
« Последнее редактирование: Ноябрь 27, 2014, 16:14 от Гурман » Записан

2^7-1 == 127, задумайтесь...
vregess
Гость
« Ответ #14 : Ноябрь 27, 2014, 16:45 »

В undcumented про расширение target ничего не нашёл. Только про input.

А если в input положить target?

QMake расширения знает

Знать-то он знает, но не факт, что он тебе скажет. Может он просто не отдает такую информацию (ну или не во всех контекстах) во вне.
« Последнее редактирование: Ноябрь 27, 2014, 16:49 от ck » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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