Вы можете получить код выхода, просто проверив возвращаемое значение:
int ec = bp::system("g++ main.cpp");
Перегрузка, принимающая std::error_code
, предназначена только для обработки граничного случая g++
, не существующего впервое место (чтобы он никогда не запускал исполняемый файл, и поэтому нет кода выхода).Если вы не используете эту функцию, вместо этого она выдаст исключение при сбое. 1
try {
int ec = bp::system("g++ main.cpp");
// Do something with ec
} catch (bp::process_error& exception) {
// g++ doesn't exist at all
}
Более чистый способ сделать это - сначала разрешить g++
самостоятельно, выполнив поискпеременная окружения $PATH
(точно так же, как ваша оболочка):
auto binary_path = bp::search_path(`g++`);
if (binary_path.empty()) {
// g++ doesn't exist
} else {
int ec = bp::system(binary_path, "main.cpp");
}
1 Обратите внимание, однако, что C ++ 0x равен C++ 11, непосредственно перед тем, как она была формально стандартизирована, и вполне вероятно, что ваша стандартная библиотека будет поддерживать std::error_code
, даже если вы скажете ей использовать C ++ 0x.