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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT QProcess and Rotor2.0  (Прочитано 3114 раз)
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, как один сеанс запуска процесса
Записан
Tonal
Гость
« Ответ #1 : Апрель 22, 2007, 09:02 »

Судя по всему, env.bat устанавливает какие-то переменные окружения, а все остальные их используют. А QProcess каждый раз создаёт новый процесс с новым окружением.

Можно поступить несколькими способами:
*) Запустить в QProcess cmd и заставлять его выполнять комманды через write
*) Написать маленький батничек:
Код:

call env.bat
set prog=%1
call prog %2 %3 %4 %5

и запускать всё через него
*) Можно разобраться, какие именно переменные нужны ротору и установить их самостоятельно через QProcess::setEnvironment
Записан
RusMS_
Гость
« Ответ #2 : Май 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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