diff options
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r-- | Source/cmGlobalNinjaGenerator.cxx | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 0339193..62106ac 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -1114,8 +1114,25 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os) type == cmStateEnums::SHARED_LIBRARY || type == cmStateEnums::MODULE_LIBRARY || type == cmStateEnums::OBJECT_LIBRARY || - type == cmStateEnums::UTILITY) && - !gt->GetPropertyAsBool("EXCLUDE_FROM_ALL")) { + type == cmStateEnums::UTILITY)) { + if (const char* exclude = gt->GetProperty("EXCLUDE_FROM_ALL")) { + if (cmIsOn(exclude)) { + // This target has been explicitly excluded. + continue; + } + // This target has been explicitly un-excluded. The directory-level + // rule for every directory between this and the root (exclusive) + // should depend on the target-level rule for this target. + cmStateSnapshot dir = + lg->GetStateSnapshot().GetBuildsystemDirectoryParent(); + cmStateSnapshot parent = dir.GetBuildsystemDirectoryParent(); + while (parent.IsValid()) { + std::string const& folder = dir.GetDirectory().GetCurrentBinary(); + targetsPerFolder[folder].push_back(gt->GetName()); + dir = parent; + parent = parent.GetBuildsystemDirectoryParent(); + } + } folderTargets.push_back(gt->GetName()); } } |