export: Allow compatible build-tree exports

Modify how cmExportBuildFileGenerator::FindExportInfo collects target
export information to properly record the export sets which export a
target. (The old behavior treated every invocation as a separate set,
which is reasonable for export(TARGETS) but does not allow referencing a
target exported multiple times via export(EXPORT). This reflects recent
changes to allow this for installed exports.)
This commit is contained in:
Matthew Woehlke
2025-02-24 14:54:50 -05:00
parent 8b8cf1ac8e
commit 26691689a3
9 changed files with 46 additions and 10 deletions

View File

@@ -186,15 +186,20 @@ cmExportFileGenerator::ExportInfo cmExportBuildFileGenerator::FindExportInfo(
target->GetLocalGenerator()->GetGlobalGenerator()->GetBuildExportSets();
for (auto const& exp : allExportSets) {
auto const& exportSet = exp.second;
cmExportBuildFileGenerator const* const bfg = exp.second;
cmExportSet const* const exportSet = bfg->GetExportSet();
std::vector<TargetExport> targets;
exportSet->GetTargets(targets);
bfg->GetTargets(targets);
if (std::any_of(
targets.begin(), targets.end(),
[&name](TargetExport const& te) { return te.Name == name; })) {
exportSets.insert(exp.first);
if (exportSet) {
exportSets.insert(exportSet->GetName());
} else {
exportSets.insert(exp.first);
}
exportFiles.push_back(exp.first);
namespaces.insert(exportSet->GetNamespace());
namespaces.insert(bfg->GetNamespace());
}
}