mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 22:37:30 +08:00
VS: Build custom commands concurrently when possible
Enable the `BuildInParallel` setting in VS project files when supported. Fixes: #18405
This commit is contained in:

committed by
Brad King

parent
e107fd0713
commit
33c15ae2b9
@@ -1498,6 +1498,17 @@ bool cmGlobalVisualStudio10Generator::IsMsBuildRestoreSupported() const
|
|||||||
cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_7_5));
|
cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_7_5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalVisualStudio10Generator::IsBuildInParallelSupported() const
|
||||||
|
{
|
||||||
|
if (this->Version >= VSVersion::VS16) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::string const vsVer15_8_0 = "15.8.27705.0";
|
||||||
|
cm::optional<std::string> vsVer = this->GetVSInstanceVersion();
|
||||||
|
return (vsVer &&
|
||||||
|
cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer15_8_0));
|
||||||
|
}
|
||||||
std::string cmGlobalVisualStudio10Generator::GetClFlagTableName() const
|
std::string cmGlobalVisualStudio10Generator::GetClFlagTableName() const
|
||||||
{
|
{
|
||||||
std::string const& toolset = this->GetPlatformToolsetString();
|
std::string const& toolset = this->GetPlatformToolsetString();
|
||||||
|
@@ -168,6 +168,7 @@ public:
|
|||||||
cmIDEFlagTable const* GetNasmFlagTable() const;
|
cmIDEFlagTable const* GetNasmFlagTable() const;
|
||||||
|
|
||||||
bool IsMsBuildRestoreSupported() const;
|
bool IsMsBuildRestoreSupported() const;
|
||||||
|
bool IsBuildInParallelSupported() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
cmGlobalVisualStudio10Generator(cmake* cm, const std::string& name,
|
cmGlobalVisualStudio10Generator(cmake* cm, const std::string& name,
|
||||||
|
@@ -1807,7 +1807,8 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
|
|||||||
outputs.str(), comment, ccg);
|
outputs.str(), comment, ccg);
|
||||||
} else {
|
} else {
|
||||||
this->WriteCustomRuleCpp(*spe2, c, script, additional_inputs.str(),
|
this->WriteCustomRuleCpp(*spe2, c, script, additional_inputs.str(),
|
||||||
outputs.str(), comment, ccg, symbolic);
|
outputs.str(), comment, ccg, symbolic,
|
||||||
|
command.GetUsesTerminal());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1816,9 +1817,12 @@ void cmVisualStudio10TargetGenerator::WriteCustomRuleCpp(
|
|||||||
Elem& e2, std::string const& config, std::string const& script,
|
Elem& e2, std::string const& config, std::string const& script,
|
||||||
std::string const& additional_inputs, std::string const& outputs,
|
std::string const& additional_inputs, std::string const& outputs,
|
||||||
std::string const& comment, cmCustomCommandGenerator const& ccg,
|
std::string const& comment, cmCustomCommandGenerator const& ccg,
|
||||||
bool symbolic)
|
bool symbolic, bool uses_terminal)
|
||||||
{
|
{
|
||||||
const std::string cond = this->CalcCondition(config);
|
const std::string cond = this->CalcCondition(config);
|
||||||
|
if (this->GlobalGenerator->IsBuildInParallelSupported() && !uses_terminal) {
|
||||||
|
e2.WritePlatformConfigTag("BuildInParallel", cond, "true");
|
||||||
|
}
|
||||||
e2.WritePlatformConfigTag("Message", cond, comment);
|
e2.WritePlatformConfigTag("Message", cond, comment);
|
||||||
e2.WritePlatformConfigTag("Command", cond, script);
|
e2.WritePlatformConfigTag("Command", cond, script);
|
||||||
e2.WritePlatformConfigTag("AdditionalInputs", cond, additional_inputs);
|
e2.WritePlatformConfigTag("AdditionalInputs", cond, additional_inputs);
|
||||||
|
@@ -157,7 +157,8 @@ private:
|
|||||||
std::string const& additional_inputs,
|
std::string const& additional_inputs,
|
||||||
std::string const& outputs,
|
std::string const& outputs,
|
||||||
std::string const& comment,
|
std::string const& comment,
|
||||||
cmCustomCommandGenerator const& ccg, bool symbolic);
|
cmCustomCommandGenerator const& ccg, bool symbolic,
|
||||||
|
bool uses_terminal);
|
||||||
void WriteCustomRuleCSharp(Elem& e0, std::string const& config,
|
void WriteCustomRuleCSharp(Elem& e0, std::string const& config,
|
||||||
std::string const& commandName,
|
std::string const& commandName,
|
||||||
std::string const& script,
|
std::string const& script,
|
||||||
|
Reference in New Issue
Block a user