Название: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 12, 2015, 22:32 В стандартном qmake-проекте требуется формировать текстовый файл, в который надо записывать некий текст и подставлять в него имя TARGET, заданное в этом проекте. Решение должно быть мультиплатформенным, поэтому команд ОС типа "copy чего-то-там" необходимо избежать.
Подробнее - надо до сборки проекта формировать файл ресурсов, в который надо вкатать TARGET проекта, как префикс ресурса. То есть, надо в проекте создавать файл w.qrc, в который должен быть записан текст: <RCC><qresource prefix="/$$TARGET"><file>w.png</file></qresource></RCC> где $$TARGET - динамически подставляемое имя цели сборки проекта. То есть, если в начале проекта TARGET=widgetbutton, то в w.qrc должно записаться <RCC><qresource prefix="/widgetbutton"><file>w.png</file></qresource></RCC> Может это другим способом можно сделать? Название: Re: Формирование текстового файла в qmake проекте Отправлено: kambala от Май 13, 2015, 14:14 echo "ляляля" > w.qrc
в виндовой цмд вроде точно так же пишется. только кавычки экранировать надо. Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 13, 2015, 18:51 echo "ляляля" > w.qrc в виндовой цмд вроде точно так же пишется. только кавычки экранировать надо. Не хочется в проекте с командным процессором ОС связываться. Нужно что-то типа fprintf() но не видно. Название: Re: Формирование текстового файла в qmake проекте Отправлено: Old от Май 13, 2015, 19:03 Не хочется в проекте с командным процессором ОС связываться. qmake не очень навороченная система сборки, вы вряд ли обойдетесь без внешних инструментов.Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 13, 2015, 19:32 system(echo) тоже не работает...
system(echo "test" > t.txt) - записывает в файл system(echo "\<RCC\>\<qresource prefix=\"/$${TARGET}\"\>\<file\>w.png\</file\>\</qresource\>\</RCC\>" > w.qrc) - ругается три раза на "устаревшие обратные слэши" и "неожиданный >", и ничего не записывает, добавление \ к / не помогает ЗЫ и даже system(echo "\<RCC\>" > w.qrc) ничего не делает. Символы < и > в любом виде, хоть со слэшем, хоть без - колдобят парсер, команда не выполняется. Я даже не пробовал сначала, подозревал этот косяк, поэтому и говорю, что нужно иначе. Можно, конечно, бинарник сваять, который будет создаваться первым в проекте, и запускаться той же командой system... Но как-то это криво уже. Название: Re: Формирование текстового файла в qmake проекте Отправлено: kambala от Май 13, 2015, 23:10 Код: createFileTarget.commands = echo \\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\> > w.qrc Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 13, 2015, 23:46 Код: createFileTarget.commands = echo \\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\> > w.qrc Ya plakalЪ... Спасибо, на самом деле, если заработает. Название: Re: Формирование текстового файла в qmake проекте Отправлено: kambala от Май 14, 2015, 15:09 qmake такой qmake :)
Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 15, 2015, 14:04 up
на самом деле, и так не работает... Код: createFileTarget.commands = echo \\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\> > w.qrc Код: createFileTarget.commands = "echo \\"\\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\>\\" > w.qrc" Код: createFileTarget.commands = "echo <RCC><qresource prefix="/$$TARGET"><file>w.png</file></qresource></RCC> > w.qrc" - командный процессор ругается на неожиданный символ < Код: createFileTarget.commands = "echo \"<RCC><qresource prefix="/$$TARGET"><file>w.png</file></qresource></RCC>\" > w.qrc" - записывает файл w.qrc, но с двойными кавычками в начале и конце строки, на что ругается компилятор ресурсов Последний вариант - почти то, что надо, но не получается убрать двойные кавычки из записываемого файла. Это уже дебилизм разработчиков из Microsoft - при выполнении команды echo она печатает двойные кавычки вместе с текстом. Название: Re: Формирование текстового файла в qmake проект Отправлено: Johnik от Май 15, 2015, 14:13 записывает файл w.qrc, но с двойными кавычками в начале и конце строки, на что ругается компилятор ресурсов попробуйте символ '<' и '>' esc'апить символом '^' - в bat файлах именно он предназначен для экранирования.Название: Re: Формирование текстового файла в qmake проект Отправлено: Гурман от Май 15, 2015, 14:28 записывает файл w.qrc, но с двойными кавычками в начале и конце строки, на что ругается компилятор ресурсов попробуйте символ '<' и '>' esc'апить символом '^' - в bat файлах именно он предназначен для экранирования.Мне нужен мультиплатформенный вариант. Название: Re: Формирование текстового файла в qmake проекте Отправлено: Johnik от Май 15, 2015, 14:31 Код: win32: { Название: Re: Формирование текстового файла в qmake проекте Отправлено: kambala от Май 15, 2015, 19:47 я в мак ос с 4.8.5 тестировал, кури батманы
Название: Re: Формирование текстового файла в qmake проекте Отправлено: twp от Май 21, 2015, 13:09 Возможно QMAKE_SUBSTITUTES (https://wiki.qt.io/QMake-top-level-srcdir-and-builddir#Qt_4_based_solution) то что надо
Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 21, 2015, 20:24 Возможно QMAKE_SUBSTITUTES (https://wiki.qt.io/QMake-top-level-srcdir-and-builddir#Qt_4_based_solution) то что надо По описанию очень похоже... надо попробовать. Не. Оно копирует в каталог сборки. А мне надо, чтобы попадало в каталог проекта. Если бы у этой команды параметр targetdir был, то было бы самое то. Название: Re: Формирование текстового файла в qmake проекте Отправлено: twp от Май 21, 2015, 21:59 Оно, просто требовать от "замены по шаблону" еще и копирование файла шаблона уже слишком :)
А собственно в чем проблема задать копирование файла-шаблона в директорию проекта? Вот примерный вариант: Код: !exists($$OUT_PWD/template.qrc.in) { P.S. Пути для копирования системно-зависимые, и для винды надо делать замену: Код: WIN_OUT_PWD = $$replace(OUT_PWD, /, \\) Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 21, 2015, 22:35 Только наоборот - после работы QMAKE_SUBSTITUTES результат без .in надо копировать в подкаталог проекта. И желательно удалять его в каталоге сборки. Иначе там будет болтаться файл с одинаковым именем, но с разным содержимым, относящийся к разным подпроектам... Такие вещи чреваты разными неожиданностями.
Название: Re: Формирование текстового файла в qmake проекте Отправлено: twp от Май 21, 2015, 23:24 Можно заменить вместо QMAKE_COPY на QMAKE_MOVE для переноса с удалением. Но вообще я не совсем понял манипуляции с каталогами. Пример как организовано в моем проекте: файл шаблона (допустим w.qrc.in) лежит в каком-то общем каталоге (не принадлежащему ни одному из проектов) под контролем версий и он используется как шаблон для генерации файлов в нескольких проектах. В каждом проекте в pro-файле прописано копирование файла-шаблона в каталог проекта и генерация собственно целевого файла. В итоге в каталоге сборки проекта будут находятся файлы w.qrc.in и сгенерированный w.qrc. Оба файла удаляются при полной очистке сборки через git clean -dfx.
Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 22, 2015, 00:29 Можно заменить вместо QMAKE_COPY на QMAKE_MOVE для переноса с удалением. Но вообще я не совсем понял манипуляции с каталогами. Пример как организовано в моем проекте: файл шаблона (допустим w.qrc.in) лежит в каком-то общем каталоге (не принадлежащему ни одному из проектов) под контролем версий и он используется как шаблон для генерации файлов в нескольких проектах. В каждом проекте в pro-файле прописано копирование файла-шаблона в каталог проекта и генерация собственно целевого файла. В итоге в каталоге сборки проекта будут находятся файлы w.qrc.in и сгенерированный w.qrc. Оба файла удаляются при полной очистке сборки через git clean -dfx. У меня у всех соответствующих подпроектов (TEMPLATE = subdirs) один и тот же target dir. Более того, у них один и тот же код сборки в файле .pro, который инклюдится из одного файла w.pri. Эти подпроекты - плагины, которые собираются сразу там, откуда их на отладку грузит папа-проект, а он грузит их из одного каталога app_path/plugins. А w.qrc при сборке каждого плагина должен находиться у каждого подпроекта в том же каталоге, где находится его w.pro. Ибо w.qrc - это специфичный ресурс плагина с его иконкой, которая тут же рядом лежит. Если у всех подпроектов QMAKE_SUBSTITUTES будет кидать w.qrc в каталог сборки - это значит, что он будет кидать его в один и тот же каталог, где вообще то он совершенно не нужен. И т.д. - после каждого вызова qmake для любого плагина, каждому плагину будет пришиваться один и тот же файл описания ресурсов. Чтобы этого не было, из общего каталога сборки, после QMAKE_SUBSTITUTES необходимо утаскивать полученный w.qrc в каталог исходников плагина. Муторно это всё как-то... Название: Re: Формирование текстового файла в qmake проекте Отправлено: twp от Май 22, 2015, 19:44 Чтобы этого не было, из общего каталога сборки, после QMAKE_SUBSTITUTES необходимо утаскивать полученный w.qrc в каталог исходников плагина. Муторно это всё как-то... А не проще ли скопировать w.qrc.in в каждую деректорию плагина к w.pro и уже там делать подмену параметров шаблона? Я так понимаю, что QMAKE_SUBSTITUTES прописывается в w.pri? Название: Re: Формирование текстового файла в qmake проекте Отправлено: Гурман от Май 24, 2015, 01:00 Чтобы этого не было, из общего каталога сборки, после QMAKE_SUBSTITUTES необходимо утаскивать полученный w.qrc в каталог исходников плагина. Муторно это всё как-то... А не проще ли скопировать w.qrc.in в каждую деректорию плагина к w.pro и уже там делать подмену параметров шаблона? Я так понимаю, что QMAKE_SUBSTITUTES прописывается в w.pri? w.qrc.in будет одинаковый для всех плагинов, нет особого смысла его размножать, тем более, что на необходимость копировать w.qrc это никак не влияет |