Название: QT QProcess and Rotor2.0 Отправлено: RusMS_ от Апрель 20, 2007, 18:07 У меня есть тулза, написанная с помощью QT framework. Из нее посредством класса QProcess хочу компилировать Rotor2.0 — т.е. сначала вызывать env.bat, потом buildall.cmd, потом все остальное (билдить приложения, вызывать их clix <path_to_application> и т.д.
Но в Rotor2.0 есть некоторые тонкие нюансы — его компилить можно только через cmd, причем в одном и том же окне cmd. Т.е. если мы открыли одно окно, там запустили env.bat, buildall.cmd, то в другом окне вызвать clix <path_to_application> не получится. Ну так вот. Я пытался создавать процесс через QProcess(все output процесса собираются в QTextEdit), им вызывать сначала env.bat, потом buildall.cmd, так не работает. Когда я вызываю buildall, пишет, что я env.bat не вызвал. Причем это все я делал ОДНИМ процессом(так надеялся, что заработает Работает хоть как-то, если я через QProcess вызываю батник, в котором написал: chdir D:\Rotor_2.0\sscli20\ call env.bat call buildall.cmd clix <path_to_application> Но так делать плохо, потому что так не получится внось вызвать application, хочется, чтобы можно было всякий раз вызывать application, компилить, в общем, свобода действий чтобы была. Также хочется, чтобы можно было сначала вызвать какой-нибудь кнопочкой из тулзы env.bat, потом buildall, а не сразу все подряд. Как обойти эти неудобства Rotor'a? Надо как-то эмулировать для Rotor'a, что мы находимся в одном и том же окне cmd. Я думал, что если все делать одним QProcess процессом, будет достаточно. Оказалось, что нет. Rotor воспринимает одно окно cmd, как один сеанс запуска процесса Название: QT QProcess and Rotor2.0 Отправлено: Tonal от Апрель 22, 2007, 09:02 Судя по всему, env.bat устанавливает какие-то переменные окружения, а все остальные их используют. А QProcess каждый раз создаёт новый процесс с новым окружением.
Можно поступить несколькими способами: *) Запустить в QProcess cmd и заставлять его выполнять комманды через write *) Написать маленький батничек: Код:
и запускать всё через него *) Можно разобраться, какие именно переменные нужны ротору и установить их самостоятельно через QProcess::setEnvironment Название: QT QProcess and Rotor2.0 Отправлено: RusMS_ от Май 08, 2007, 19:16 О, тут ответили, оказывается=)
Спасибо большое=) да, я примерно так и сделал. Я решил забить на то, что каждый раз приходится вызывать env.bat. Т.е. у меня при вызове какого-либо *.exe создается батничек, в котором всякий раз предварительно вызывается env.bat, соотв-но пишет там что-нибудь вроде: Setting environment for using Microsoft Visual Studio 2005 x86 tools. 32-bit build Checked Environment Building for Operating System - NT32 Processor Family - x86 Processor - i386 Build Type - chk |