Здравствуйте.
Хочу автоматизировать отправку команд для компиляции программ из консоли.
Мне надо запустить дочерний процесс, который будет эквивалентен запуску bat-файла с содержимым
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"" x86
и в открывшемся окне выполнить какие-нибудь команды, например
cd c:
nmake
nmake install
В общем, пробую писать данные через пайпы, но мой команды не слышат
#include <stdio.h>
#include <stdlib.h>
void foo(char *path)
{
std::string cmd_exe = "%comspec% /k \"\"C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\vcvarsall.bat\"\" x86";
FILE *file = _popen(cmd_exe.data(), "wt");
if(!file)
return;
//
std::string folder = path;
std::replace(folder.begin(), folder.end(), '\\', '/');
std::stringstream cd;
cd << "cd \"" << folder << "\"";
fputs(cd.str().data(), file);
//
std::stringstream nmake;
nmake<< "nmake";
fputs(nmake.str().data(), file);
_pclose(file);
}
То есть, когда я вызываю _popen(), то в консоли вижу стандартное приглашение к работе "D:\something>".
Но дальше мои команты "cd c:" и "nmake" игнорируются.
Указатель file не нулевой, но pipe не реагирует на мои команды. Возможно я как то не правильно открываю pipe.