MCPcopy Create free account
hub / github.com/Kitware/CMake / GetFileSetFiles

Method GetFileSetFiles

Source/cmExportBuildCMakeConfigGenerator.cxx:219–279  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

217}
218
219std::string cmExportBuildCMakeConfigGenerator::GetFileSetFiles(
220 cmGeneratorTarget* gte, cmFileSet* fileSet, cmTargetExport const* /*te*/)
221{
222 std::vector<std::string> resultVector;
223
224 auto configs =
225 gte->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
226
227 auto fileEntries = fileSet->CompileFileEntries();
228 auto directoryEntries = fileSet->CompileDirectoryEntries();
229
230 for (auto const& config : configs) {
231 cm::GenEx::Context context(gte->LocalGenerator, config);
232 auto directories =
233 fileSet->EvaluateDirectoryEntries(directoryEntries, context, gte);
234
235 std::map<std::string, std::vector<std::string>> files;
236 for (auto const& entry : fileEntries) {
237 fileSet->EvaluateFileEntry(directories, files, entry, context, gte);
238 }
239
240 bool const contextSensitive =
241 std::any_of(directoryEntries.begin(), directoryEntries.end(),
242 EntryIsContextSensitive) ||
243 std::any_of(fileEntries.begin(), fileEntries.end(),
244 EntryIsContextSensitive);
245
246 auto const& type = fileSet->GetType();
247 // C++ modules do not support interface file sets which are dependent upon
248 // the configuration.
249 if (contextSensitive && type == "CXX_MODULES"_s) {
250 auto* mf = this->LG->GetMakefile();
251 std::ostringstream e;
252 e << "The \"" << gte->GetName() << "\" target's interface file set \""
253 << fileSet->GetName() << "\" of type \"" << type
254 << "\" contains context-sensitive file entries which is not "
255 "supported.";
256 mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
257 return std::string{};
258 }
259
260 for (auto const& it : files) {
261 for (auto const& filename : it.second) {
262 auto escapedFile = cmOutputConverter::EscapeForCMake(
263 filename, cmOutputConverter::WrapQuotes::NoWrap);
264 if (contextSensitive && configs.size() != 1) {
265 resultVector.push_back(
266 cmStrCat("\"$<$<CONFIG:", config, ">:", escapedFile, ">\""));
267 } else {
268 resultVector.emplace_back(cmStrCat('"', escapedFile, '"'));
269 }
270 }
271 }
272
273 if (!(contextSensitive && configs.size() != 1)) {
274 break;
275 }
276 }

Callers

nothing calls this directly

Calls 15

GetGeneratorConfigsMethod · 0.80
CompileFileEntriesMethod · 0.80
EvaluateFileEntryMethod · 0.80
strMethod · 0.80
push_backMethod · 0.80
emplace_backMethod · 0.80
cmStrCatFunction · 0.70
cmJoinFunction · 0.70
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected