mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-25 15:49:08 -05:00
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
This commit is contained in:
@@ -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, '/');
|
||||
}
|
||||
|
||||
|
||||
@@ -339,6 +339,10 @@ private:
|
||||
|
||||
std::string GetLibraryOrFrameworkPath(const std::string& path) const;
|
||||
|
||||
std::string GetSymrootDir() const;
|
||||
std::string GetTargetTempDir(cmGeneratorTarget const* gt,
|
||||
std::string const& configName) const;
|
||||
|
||||
static std::string GetDeploymentPlatform(const cmMakefile* mf);
|
||||
|
||||
void ComputeArchitectures(cmMakefile* mf);
|
||||
|
||||
Reference in New Issue
Block a user