Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Запуск system("cmd.exe") и передача дополнительных


Автор: neosapient 17.8.2016, 11:35
Здравствуйте.

Хочу автоматизировать отправку команд для компиляции программ из консоли.

Мне надо запустить дочерний процесс, который будет эквивалентен запуску 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::stringstream cd;
    //
    std::string folder = path;
    std::replace(folder.begin(), folder.end(), '\\', '/');
    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.

Автор: feodorv 20.8.2016, 20:22
Перевод строки к командам добавлять пробовали?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)