| 2077 | } |
| 2078 | |
| 2079 | void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) |
| 2080 | { |
| 2081 | // -- Additional clean target |
| 2082 | bool additionalFiles = this->WriteTargetCleanAdditional(os); |
| 2083 | |
| 2084 | // -- Default clean target |
| 2085 | // Write rule |
| 2086 | { |
| 2087 | cmNinjaRule rule("CLEAN"); |
| 2088 | rule.Command = cmStrCat(this->NinjaCmd(), " $FILE_ARG -t clean $TARGETS"); |
| 2089 | rule.Description = "Cleaning all built files..."; |
| 2090 | rule.Comment = "Rule for cleaning all built files."; |
| 2091 | WriteRule(*this->RulesFileStream, rule); |
| 2092 | } |
| 2093 | |
| 2094 | // Write build |
| 2095 | { |
| 2096 | cmNinjaBuild build("CLEAN"); |
| 2097 | build.Comment = "Clean all the built files."; |
| 2098 | build.Outputs.emplace_back(); |
| 2099 | |
| 2100 | for (std::string const& config : this->GetConfigNames()) { |
| 2101 | build.Outputs.front() = this->BuildAlias( |
| 2102 | this->NinjaOutputPath(this->GetCleanTargetName()), config); |
| 2103 | if (this->IsMultiConfig()) { |
| 2104 | build.Variables["TARGETS"] = cmStrCat( |
| 2105 | this->BuildAlias( |
| 2106 | this->NinjaOutputPath(GetByproductsForCleanTargetName()), config), |
| 2107 | ' ', this->NinjaOutputPath(GetByproductsForCleanTargetName())); |
| 2108 | } |
| 2109 | build.ExplicitDeps.clear(); |
| 2110 | if (additionalFiles) { |
| 2111 | build.ExplicitDeps.push_back(this->BuildAlias( |
| 2112 | this->NinjaOutputPath(this->GetAdditionalCleanTargetName()), |
| 2113 | config)); |
| 2114 | } |
| 2115 | for (std::string const& fileConfig : this->GetConfigNames()) { |
| 2116 | if (fileConfig != config && !this->EnableCrossConfigBuild()) { |
| 2117 | continue; |
| 2118 | } |
| 2119 | if (this->IsMultiConfig()) { |
| 2120 | build.Variables["FILE_ARG"] = cmStrCat( |
| 2121 | "-f ", |
| 2122 | this->NinjaOutputPath( |
| 2123 | cmGlobalNinjaMultiGenerator::GetNinjaImplFilename(fileConfig))); |
| 2124 | } |
| 2125 | this->WriteBuild(*this->GetImplFileStream(fileConfig), build); |
| 2126 | } |
| 2127 | } |
| 2128 | |
| 2129 | if (this->EnableCrossConfigBuild()) { |
| 2130 | build.Outputs.front() = this->BuildAlias( |
| 2131 | this->NinjaOutputPath(this->GetCleanTargetName()), "all"); |
| 2132 | build.ExplicitDeps.clear(); |
| 2133 | |
| 2134 | if (additionalFiles) { |
| 2135 | for (auto const& config : this->CrossConfigs) { |
| 2136 | build.ExplicitDeps.push_back(this->BuildAlias( |
no test coverage detected