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

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

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

Сообщений: 1442

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


Просмотр профиля
« : Май 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>

Может это другим способом можно сделать?
Записан

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 13, 2015, 14:14 »

echo "ляляля" > w.qrc

в виндовой цмд вроде точно так же пишется. только кавычки экранировать надо.
Записан

Изучением 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
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #2 : Май 13, 2015, 18:51 »

echo "ляляля" > w.qrc

в виндовой цмд вроде точно так же пишется. только кавычки экранировать надо.

Не хочется в проекте с командным процессором ОС связываться. Нужно что-то типа fprintf() но не видно.
« Последнее редактирование: Май 13, 2015, 18:55 от Гурман » Записан

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

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Май 13, 2015, 19:03 »

Не хочется в проекте с командным процессором ОС связываться.
qmake не очень навороченная система сборки, вы вряд ли обойдетесь без внешних инструментов.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #4 : Май 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... Но как-то это криво уже.
« Последнее редактирование: Май 13, 2015, 19:46 от Гурман » Записан

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Май 13, 2015, 23:10 »

Код:
createFileTarget.commands = echo \\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\> > w.qrc
PRE_TARGETDEPS += createFileTarget
QMAKE_EXTRA_TARGETS += createFileTarget
Записан

Изучением 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
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #6 : Май 13, 2015, 23:46 »

Код:
createFileTarget.commands = echo \\<RCC\\>\\<qresource prefix=\\\"/$$TARGET\\\"\\>\\<file\\>w.png\\</file\\>\\</qresource\\>\\</RCC\\> > w.qrc

Ya plakalЪ...

Спасибо, на самом деле, если заработает.
Записан

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Май 14, 2015, 15:09 »

qmake такой qmake Улыбающийся
Записан

Изучением 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
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #8 : Май 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"
- записывает файл 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 она печатает двойные кавычки вместе с текстом.
« Последнее редактирование: Май 15, 2015, 14:08 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Johnik
Крякер
****
Online Online

Сообщений: 339


Просмотр профиля
« Ответ #9 : Май 15, 2015, 14:13 »

записывает файл w.qrc, но с двойными кавычками в начале и конце строки, на что ругается компилятор ресурсов
попробуйте символ '<' и '>' esc'апить символом '^' - в bat файлах именно он предназначен для экранирования.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #10 : Май 15, 2015, 14:28 »

записывает файл w.qrc, но с двойными кавычками в начале и конце строки, на что ругается компилятор ресурсов
попробуйте символ '<' и '>' esc'апить символом '^' - в bat файлах именно он предназначен для экранирования.

Мне нужен мультиплатформенный вариант.
Записан

2^7-1 == 127, задумайтесь...
Johnik
Крякер
****
Online Online

Сообщений: 339


Просмотр профиля
« Ответ #11 : Май 15, 2015, 14:31 »

Код:
win32: {
...
} else {
...
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Май 15, 2015, 19:47 »

я в мак ос с 4.8.5 тестировал, кури батманы
Записан

Изучением 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
twp
Гость
« Ответ #13 : Май 21, 2015, 13:09 »

Возможно QMAKE_SUBSTITUTES то что надо
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #14 : Май 21, 2015, 20:24 »

Возможно QMAKE_SUBSTITUTES то что надо

По описанию очень похоже... надо попробовать.

Не. Оно копирует в каталог сборки. А мне надо, чтобы попадало в каталог проекта. Если бы у этой команды параметр targetdir был, то было бы самое то.
« Последнее редактирование: Май 21, 2015, 20:54 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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