summaryrefslogtreecommitdiffstats
path: root/Source/cmNinjaTargetGenerator.cxx
diff options
context:
space:
mode:
authorAdam Strzelecki <ono@java.pl>2014-06-27 20:13:52 (GMT)
committerBrad King <brad.king@kitware.com>2014-06-30 13:33:37 (GMT)
commit93371ed592b85ccc179845dbd6e6018ca2193659 (patch)
tree7a43634f2c71a9e866c724c334eeececc0cf726b /Source/cmNinjaTargetGenerator.cxx
parent7243c95129fd8cd0d01495d33848663c796f91db (diff)
downloadCMake-93371ed592b85ccc179845dbd6e6018ca2193659.zip
CMake-93371ed592b85ccc179845dbd6e6018ca2193659.tar.gz
CMake-93371ed592b85ccc179845dbd6e6018ca2193659.tar.bz2
Ninja: Skip generating empty phony rules
Ninja generator ensures that all custom commands being target dependencies are run before other source compilations. However in case there are no such dependencies it currently generates empty phony rules which clutter the build graph. Teach the Ninja generator to produce such rules only when necessary.
Diffstat (limited to 'Source/cmNinjaTargetGenerator.cxx')
-rw-r--r--Source/cmNinjaTargetGenerator.cxx32
1 files changed, 19 insertions, 13 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 24689fb..816e6d8 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -542,22 +542,24 @@ cmNinjaTargetGenerator
std::back_inserter(orderOnlyDeps), MapToNinjaPath());
}
- cmNinjaDeps orderOnlyTarget;
- orderOnlyTarget.push_back(this->OrderDependsTargetForTarget());
- this->GetGlobalGenerator()->WritePhonyBuild(this->GetBuildFileStream(),
- "Order-only phony target for "
- + this->GetTargetName(),
- orderOnlyTarget,
- cmNinjaDeps(),
- cmNinjaDeps(),
- orderOnlyDeps);
-
+ if (!orderOnlyDeps.empty())
+ {
+ cmNinjaDeps orderOnlyTarget;
+ orderOnlyTarget.push_back(this->OrderDependsTargetForTarget());
+ this->GetGlobalGenerator()->WritePhonyBuild(this->GetBuildFileStream(),
+ "Order-only phony target for "
+ + this->GetTargetName(),
+ orderOnlyTarget,
+ cmNinjaDeps(),
+ cmNinjaDeps(),
+ orderOnlyDeps);
+ }
std::vector<cmSourceFile const*> objectSources;
this->GeneratorTarget->GetObjectSources(objectSources, config);
for(std::vector<cmSourceFile const*>::const_iterator
si = objectSources.begin(); si != objectSources.end(); ++si)
{
- this->WriteObjectBuildStatement(*si);
+ this->WriteObjectBuildStatement(*si, !orderOnlyDeps.empty());
}
std::string def = this->GeneratorTarget->GetModuleDefinitionFile(config);
if(!def.empty())
@@ -570,7 +572,8 @@ cmNinjaTargetGenerator
void
cmNinjaTargetGenerator
-::WriteObjectBuildStatement(cmSourceFile const* source)
+::WriteObjectBuildStatement(
+ cmSourceFile const* source, bool writeOrderDependsTargetForTarget)
{
std::string comment;
const std::string language = source->GetLanguage();
@@ -599,7 +602,10 @@ cmNinjaTargetGenerator
}
cmNinjaDeps orderOnlyDeps;
- orderOnlyDeps.push_back(this->OrderDependsTargetForTarget());
+ if (writeOrderDependsTargetForTarget)
+ {
+ orderOnlyDeps.push_back(this->OrderDependsTargetForTarget());
+ }
// If the source file is GENERATED and does not have a custom command
// (either attached to this source file or another one), assume that one of