summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalVisualStudio10Generator.cxx
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2018-10-30 20:13:33 (GMT)
committerBrad King <brad.king@kitware.com>2019-01-25 13:20:02 (GMT)
commit1a45266cb544d73a7d7e46d6129ead1faf71fa85 (patch)
tree3deb468824f493530a91f0da882dafa069921c94 /Source/cmGlobalVisualStudio10Generator.cxx
parent378473f9f184000cb768c1b99e6242e054787f34 (diff)
downloadCMake-1a45266cb544d73a7d7e46d6129ead1faf71fa85.zip
CMake-1a45266cb544d73a7d7e46d6129ead1faf71fa85.tar.gz
CMake-1a45266cb544d73a7d7e46d6129ead1faf71fa85.tar.bz2
cmGlobalGenerator: Add a class that represent the build command
This refactors a std::vector<std::string> into a class so that we can extend the features to represent things such as multiple chained commands in the future.
Diffstat (limited to 'Source/cmGlobalVisualStudio10Generator.cxx')
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx31
1 files changed, 17 insertions, 14 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index dbe582b..051ef18 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -864,7 +864,7 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
}
void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
- std::vector<std::string>& makeCommand, const std::string& makeProgram,
+ GeneratedMakeCommand& makeCommand, const std::string& makeProgram,
const std::string& projectName, const std::string& projectDir,
const std::string& targetName, const std::string& config, bool fast,
int jobs, bool verbose, std::vector<std::string> const& makeOptions)
@@ -879,6 +879,10 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
bool useDevEnv = (makeProgramLower.find("devenv") != std::string::npos ||
makeProgramLower.find("vcexpress") != std::string::npos);
+ // Workaround to convince VCExpress.exe to produce output.
+ makeCommand.RequiresOutputForward =
+ (makeProgramLower.find("vcexpress") != std::string::npos);
+
// MSBuild is preferred (and required for VS Express), but if the .sln has
// an Intel Fortran .vfproj then we have to use devenv. Parse it to find out.
cmSlnData slnData;
@@ -912,7 +916,7 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
return;
}
- makeCommand.push_back(makeProgramSelected);
+ makeCommand.add(makeProgramSelected);
std::string realTarget = targetName;
// msbuild.exe CxxOnly.sln /t:Build /p:Configuration=Debug /target:ALL_BUILD
@@ -921,8 +925,8 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
realTarget = "ALL_BUILD";
}
if (realTarget == "clean") {
- makeCommand.push_back(std::string(projectName) + ".sln");
- makeCommand.push_back("/t:Clean");
+ makeCommand.add(std::string(projectName) + ".sln");
+ makeCommand.add("/t:Clean");
} else {
std::string targetProject(realTarget);
targetProject += ".vcxproj";
@@ -934,7 +938,7 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
cmSystemTools::ConvertToUnixSlashes(targetProject);
}
}
- makeCommand.push_back(targetProject);
+ makeCommand.add(std::move(targetProject));
}
std::string configArg = "/p:Configuration=";
if (!config.empty()) {
@@ -942,23 +946,22 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
} else {
configArg += "Debug";
}
- makeCommand.push_back(configArg);
- makeCommand.push_back("/p:Platform=" + this->GetPlatformName());
- makeCommand.push_back(std::string("/p:VisualStudioVersion=") +
- this->GetIDEVersion());
+ makeCommand.add(configArg);
+ makeCommand.add(std::string("/p:Platform=") + this->GetPlatformName());
+ makeCommand.add(std::string("/p:VisualStudioVersion=") +
+ this->GetIDEVersion());
if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) {
if (jobs == cmake::DEFAULT_BUILD_PARALLEL_LEVEL) {
- makeCommand.push_back("/m");
+ makeCommand.add("/m");
} else {
- makeCommand.push_back(std::string("/m:") + std::to_string(jobs));
+ makeCommand.add(std::string("/m:") + std::to_string(jobs));
}
// Having msbuild.exe and cl.exe using multiple jobs is discouraged
- makeCommand.push_back("/p:CL_MPCount=1");
+ makeCommand.add("/p:CL_MPCount=1");
}
- makeCommand.insert(makeCommand.end(), makeOptions.begin(),
- makeOptions.end());
+ makeCommand.add(makeOptions.begin(), makeOptions.end());
}
bool cmGlobalVisualStudio10Generator::Find64BitTools(cmMakefile* mf)