Название: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 26, 2014, 16:40 При сборке проекта (в любом месте, можно в конце) надо удалять копии одних целевых файлов сборки (буквально TARGET, но с добавлением числового префикса к имени) и создавать автоматически копии других, тоже с добавлением префиксов. Читал, как это делается в файле проекта, чего-то написал, но оно не заработало, потому что макроимена оказались не определены. Кто-нибудь может показать похожие действия в своих файлах проектов? Речь именно о создании копий и удалении почти одноименных целевой сборке. Собираются динамические библиотеки, соответственно, файлы должны иметь правильные суффиксы в разных ОС. Ковырять варианты сейчас нет возможности - надо делать сам проект, там вагон работы. Плз, подскажите варианты правильных строк для файла проекта, а то сейчас при каждой отладочной сборке приходится все файлы (до 8 штук) удалять и копировать вручную.
Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: alex312 от Ноябрь 26, 2014, 18:32 Я сильно над файлами проекта не издеваюсь. Если мне нужны дополнительные действия после сборки - пишу батничек.
Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 26, 2014, 19:01 Я сильно над файлами проекта не издеваюсь. Если мне нужны дополнительные действия после сборки - пишу батничек. этот вариант не приемлем - для всех целевых ОС батнички придется писать, хотя всё по идее, в проекте можно сделать, но что-то не получается, переменные оказываются пустыми Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: alex312 от Ноябрь 26, 2014, 20:35 этот вариант не приемлем - для всех целевых ОС батнички придется писать, хотя всё по идее, в проекте можно сделать, но что-то не получается, переменные оказываются пустыми Да, для разных платформ прийдется писать свои батнички, или использовать какой-нить скриптовый язык (Python например). Но и для проектного файла вам надо будет писать врианты для разных OS, потому как удаление файла система сборики не делает сама, она для этого использует системные команды. Тоже касается и переименования.Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 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 Вот и вопрос - что я сделал неправильно, и как сделать правильно? Просьба ответить тем, кто точно знает ответ. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Igors от Ноябрь 27, 2014, 11:47 Просьба ответить тем, кто точно знает ответ. Ответ точно не знаю. т.к. не работаю с Creator. Но месяца 2 назад тоже долбался со скрипами в др IDE. Оказалось после доллара нужны фигурные скобки, а я недоглядел и лепил круглыеНазвание: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 27, 2014, 12:00 А-ха... таким макаром TARGET-имя оно подставило, но TARGET_EXT нифига. Вопрос меняется следующим образом - как правильно в файле проекта получить расширение для создаваемой динамической библиотеки, при том, что включено TEMPLATE=lib?
Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Igors от Ноябрь 27, 2014, 13:08 Да, и у меня дело пошло намного быстрее когда я научился печатать переменные
Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: kuzulis от Ноябрь 27, 2014, 13:35 Мы в serial port (для Qt4) используем что-то типа такого:
Код: TARGET = $$qtLibraryTarget(QtSerialPort$$QT_LIBINFIX) но вроде оно не для расширения. Возможно есть еще какой-то макрос для указания расширения.. Я не в курсе. ЗЫ: Проше все переписать на QBS :) Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 27, 2014, 13:49 Мы в serial port (для Qt4) используем что-то типа такого: Код: TARGET = $$qtLibraryTarget(QtSerialPort$$QT_LIBINFIX) но вроде оно не для расширения. Возможно есть еще какой-то макрос для указания расширения.. Я не в курсе. ЗЫ: Проше все переписать на QBS :) Сейчас уже не проще, и вообще не с руки менять инструментарий. Проще всего руками копировать и удалять, хотя это доставляет. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: kambala от Ноябрь 27, 2014, 13:56 почему переменные в скобках? там просто два доллара и имя
Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: vregess от Ноябрь 27, 2014, 14:15 Не особо разбираюсь в qmake, да и стараюсь его стороной обходить, если возможно, но судя по документации TARGET_EXT предназначен для переопределения системного расширения, т.е. если значение пустое, то используется расширение по дефолту.
Можно либо самому создавать переменную с расширением, в зависимости от платформы: Код: win32 { либо попробовать custom targets, там вроде можно узнать расширение. Код: mytarget.input = QMAKE_TARGET не совсем уверен, как прописать .input - устанавливает переменную, которая содержит входной файл (абсолютный путь) и .depends - таргет, от которого зависит mytarget, должен указывать на цель, которая собирает библиотеку. Затем по идее можно собирать make mytarget. Сначала скомпилится библиотека, а потом должен запуститься mytarget. Тут подробнее http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake (http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake) + документация qmake (Adding Custom Targets). PS если это финальный шаг перед деплоем, то вполне можно написать скрипт, который сконфигурирует и соберет проект, а потом сделает все дополнительные шаги. Я для обычно qmake-проект использую просто для сборки, а все остальное переношу в скрипт на питоне, который распихает файлы, куда надо, переименует и запакует. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 27, 2014, 16:07 почему переменные в скобках? там просто два доллара и имя Да я как только не пробовал... Без разницы. Также точно пусто вместо них в командной строке. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 27, 2014, 16:12 Можно либо самому создавать переменную с расширением, в зависимости от платформы: Да это понятно, что можно самому, но это костыль, поскольку QMake расширения знает. Мало ли на какой платформе надо будет генерить. В undcumented про расширение target ничего не нашёл. Только про input. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: vregess от Ноябрь 27, 2014, 16:45 В undcumented про расширение target ничего не нашёл. Только про input. А если в input положить target? QMake расширения знает Знать-то он знает, но не факт, что он тебе скажет. Может он просто не отдает такую информацию (ну или не во всех контекстах) во вне. Название: Re: Удаление и копирование файлов при сборке сложного проекта Отправлено: Гурман от Ноябрь 27, 2014, 16:56 А если в input положить target? Под input имеются в виду данные текущего входного файла при генерации Makefile. Никакого смысла туда "класть" target нет. |