cmGeneratorTarget: add method to get a filesystem-safe export name

C++ module support puts the export name in a filename. Export names with
`:` in them are not valid filenames on Windows. Add a method to escape
names as necessary.

See: #25828
This commit is contained in:
Ben Boeckel 2024-04-29 17:23:08 -04:00
parent b5602e7254
commit 4452d41488
2 changed files with 11 additions and 0 deletions

View File

@ -367,6 +367,16 @@ std::string cmGeneratorTarget::GetExportName() const
return this->GetName();
}
std::string cmGeneratorTarget::GetFilesystemExportName() const
{
auto fs_safe = this->GetExportName();
// First escape any `_` characters to avoid collisions.
cmSystemTools::ReplaceString(fs_safe, "_", "__");
// Escape other characters that are not generally filesystem-safe.
cmSystemTools::ReplaceString(fs_safe, ":", "_c");
return fs_safe;
}
cmValue cmGeneratorTarget::GetProperty(const std::string& prop) const
{
if (cmValue result =

View File

@ -99,6 +99,7 @@ public:
cmStateEnums::TargetType GetType() const;
const std::string& GetName() const;
std::string GetExportName() const;
std::string GetFilesystemExportName() const;
std::vector<std::string> GetPropertyKeys() const;
//! Might return a nullptr if the property is not set or invalid