diff options
author | Brad King <brad.king@kitware.com> | 2022-10-28 14:29:46 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-10-28 19:38:07 (GMT) |
commit | 024e3d2bf63c118f4a5da3ea872892ab274c697a (patch) | |
tree | f7153c58fd1914a31239fa8ced19a76a743ee728 /Source/cmGlobalXCodeGenerator.cxx | |
parent | 59ae2543165b836d01b88fe0ba4e22ecd549e239 (diff) | |
download | CMake-024e3d2bf63c118f4a5da3ea872892ab274c697a.zip CMake-024e3d2bf63c118f4a5da3ea872892ab274c697a.tar.gz CMake-024e3d2bf63c118f4a5da3ea872892ab274c697a.tar.bz2 |
Xcode: Put object files in a place that Xcode cleans
Since commit dc5fc898f6 (Xcode: Set object file locations using
TARGET_TEMP_DIR, 2022-09-29, v3.25.0-rc1~64^2~1), `xcodebuild clean`
does not remove the object files in our explicit `TARGET_TEMP_DIR`
because it is not under the `SYMROOT`. Put it there.
Fixes: #24096
Diffstat (limited to 'Source/cmGlobalXCodeGenerator.cxx')
-rw-r--r-- | Source/cmGlobalXCodeGenerator.cxx | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index dd470f8..67b6e92 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -2544,8 +2544,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt, } if (gtgt->CanCompileSources()) { - std::string tmpDir = - cmStrCat(gtgt->GetSupportDirectory(), '/', this->GetCMakeCFGIntDir()); + std::string const tmpDir = + this->GetTargetTempDir(gtgt, this->GetCMakeCFGIntDir()); buildSettings->AddAttribute("TARGET_TEMP_DIR", this->CreateString(tmpDir)); std::string outDir; @@ -4399,7 +4399,7 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( this->CreateString(swiftVersion)); } - std::string symroot = cmStrCat(root->GetCurrentBinaryDirectory(), "/build"); + std::string const symroot = this->GetSymrootDir(); buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot)); // Inside a try_compile project, do not require signing on any platform. @@ -4498,6 +4498,19 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( return true; } +std::string cmGlobalXCodeGenerator::GetSymrootDir() const +{ + return cmStrCat(this->CMakeInstance->GetHomeOutputDirectory(), "/build"); +} + +std::string cmGlobalXCodeGenerator::GetTargetTempDir( + cmGeneratorTarget const* gt, std::string const& configName) const +{ + // Use a path inside the SYMROOT. + return cmStrCat(this->GetSymrootDir(), '/', gt->GetName(), ".build/", + configName); +} + void cmGlobalXCodeGenerator::ComputeArchitectures(cmMakefile* mf) { this->Architectures.clear(); @@ -4621,8 +4634,8 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackMakefile( for (auto objLib : objlibs) { const std::string objLibName = objLib->GetName(); - std::string d = cmStrCat(objLib->GetSupportDirectory(), '/', - configName, "/lib", objLibName, ".a"); + std::string d = cmStrCat(this->GetTargetTempDir(gt, configName), + "/lib", objLibName, ".a"); std::string dependency = this->ConvertToRelativeForMake(d); makefileStream << "\\\n\t" << dependency; @@ -4636,8 +4649,8 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackMakefile( // if building for more than one architecture // then remove those executables as well if (this->Architectures.size() > 1) { - std::string universal = cmStrCat(gt->GetSupportDirectory(), '/', - configName, "/$(OBJDIR)/"); + std::string universal = + cmStrCat(this->GetTargetTempDir(gt, configName), "/$(OBJDIR)/"); for (const auto& architecture : this->Architectures) { std::string universalFile = cmStrCat(universal, architecture, '/', gt->GetFullName(configName)); @@ -5036,7 +5049,7 @@ void cmGlobalXCodeGenerator::ComputeTargetObjectDirectory( { auto objectDirArch = GetTargetObjectDirArch(*gt, this->ObjectDirArch); gt->ObjectDirectory = - cmStrCat(gt->GetSupportDirectory(), '/', this->GetCMakeCFGIntDir(), + cmStrCat(this->GetTargetTempDir(gt, this->GetCMakeCFGIntDir()), "/$(OBJECT_FILE_DIR_normal:base)/", objectDirArch, '/'); } |