cmake: Teach --build to get VCExpress output (#15437)

VCExpress does not produce output if its pipes are connected to
an interactive terminal.  Add a special case to 'cmake --build'
to capture the output through a pipe and re-print it instead of
sharing output pipes with VCExpress.
This commit is contained in:
Brad King 2015-03-10 08:42:18 -04:00
parent a6d488f2ce
commit 94887cb6f1
1 changed files with 13 additions and 4 deletions

View File

@ -1717,6 +1717,19 @@ int cmGlobalGenerator::Build(
std::string outputBuffer;
std::string* outputPtr = &outputBuffer;
std::vector<std::string> makeCommand;
this->GenerateBuildCommand(makeCommand, makeCommandCSTR, projectName,
bindir, target, config, fast, verbose,
nativeOptions);
// Workaround to convince VCExpress.exe to produce output.
if (outputflag == cmSystemTools::OUTPUT_PASSTHROUGH &&
!makeCommand.empty() && cmSystemTools::LowerCase(
cmSystemTools::GetFilenameName(makeCommand[0])) == "vcexpress.exe")
{
outputflag = cmSystemTools::OUTPUT_NORMAL;
}
// should we do a clean first?
if (clean)
{
@ -1743,10 +1756,6 @@ int cmGlobalGenerator::Build(
}
// now build
std::vector<std::string> makeCommand;
this->GenerateBuildCommand(makeCommand, makeCommandCSTR, projectName,
bindir, target, config, fast, verbose,
nativeOptions);
std::string makeCommandStr = cmSystemTools::PrintSingleCommand(makeCommand);
output += "\nRun Build Command:";
output += makeCommandStr;