Pre-compute object file names before Xcode generation
This commit is contained in:
parent
247a132422
commit
8045e17119
|
@ -19,6 +19,7 @@
|
|||
#include "cmComputeLinkInformation.h"
|
||||
#include "cmSourceFile.h"
|
||||
#include "cmCustomCommandGenerator.h"
|
||||
#include "cmGeneratorTarget.h"
|
||||
|
||||
#include <cmsys/auto_ptr.hxx>
|
||||
|
||||
|
@ -3611,3 +3612,51 @@ bool cmGlobalXCodeGenerator::IsMultiConfig()
|
|||
// Newer Xcode versions are multi config:
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void
|
||||
cmGlobalXCodeGenerator
|
||||
::ComputeTargetObjects(cmGeneratorTarget* gt) const
|
||||
{
|
||||
// Count the number of object files with each name. Warn about duplicate
|
||||
// names since Xcode names them uniquely automatically with a numeric suffix
|
||||
// to avoid exact duplicate file names. Note that Mac file names are not
|
||||
// typically case sensitive, hence the LowerCase.
|
||||
std::map<cmStdString, int> counts;
|
||||
for(std::vector<cmSourceFile*>::const_iterator
|
||||
si = gt->ObjectSources.begin();
|
||||
si != gt->ObjectSources.end(); ++si)
|
||||
{
|
||||
cmSourceFile* sf = *si;
|
||||
std::string objectName =
|
||||
cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath());
|
||||
objectName += ".o";
|
||||
|
||||
std::string objectNameLower = cmSystemTools::LowerCase(objectName);
|
||||
counts[objectNameLower] += 1;
|
||||
if (2 == counts[objectNameLower])
|
||||
{
|
||||
// TODO: emit warning about duplicate name?
|
||||
}
|
||||
|
||||
gt->Objects[sf] = objectName;
|
||||
}
|
||||
|
||||
const char* configName = this->GetCMakeCFGIntDir();
|
||||
std::string dir = this->GetObjectsNormalDirectory(
|
||||
this->CurrentProject, configName, gt->Target);
|
||||
if(this->XcodeVersion >= 21)
|
||||
{
|
||||
dir += "$(CURRENT_ARCH)/";
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef __ppc__
|
||||
dir += "ppc/";
|
||||
#endif
|
||||
#ifdef __i386
|
||||
dir += "i386/";
|
||||
#endif
|
||||
}
|
||||
gt->ObjectDirectory = dir;
|
||||
}
|
||||
|
|
|
@ -206,6 +206,8 @@ protected:
|
|||
std::vector<cmXCodeObject*> XCodeObjects;
|
||||
cmXCodeObject* RootObject;
|
||||
private:
|
||||
void ComputeTargetObjects(cmGeneratorTarget* gt) const;
|
||||
|
||||
std::string GetObjectsNormalDirectory(
|
||||
const std::string &projName,
|
||||
const std::string &configName,
|
||||
|
|
Loading…
Reference in New Issue