qmake/xcode: Do not create OBJECTS_DIR

If we create OBJECTS_DIR at qmake time, Xcode will not consider this
directory as created by the build system, and "xcodebuild --clean" will
fail.

Prevent qmake from creating that directory in the Xcode generator.

Pick-to: 5.15 6.2
Fixes: QTBUG-96305
Change-Id: I874bf34a4289ce5f2d3e2ce070ffbe56d5368861
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Joerg Bornemann 2021-09-10 10:01:31 +02:00
parent 296621a52f
commit b5a23e88be
4 changed files with 23 additions and 0 deletions

View File

@ -2073,4 +2073,10 @@ ProjectBuilderMakefileGenerator::writeSettings(const QString &var, const ProStri
return ret;
}
bool
ProjectBuilderMakefileGenerator::inhibitMakeDirOutPath(const ProKey &path) const
{
return path == "OBJECTS_DIR";
}
QT_END_NAMESPACE

View File

@ -66,6 +66,7 @@ public:
protected:
bool doPrecompiledHeaders() const override { return false; }
bool doDepends() const override { return writingUnixMakefileGenerator && UnixMakefileGenerator::doDepends(); }
bool inhibitMakeDirOutPath(const ProKey &path) const override;
};
QT_END_NAMESPACE

View File

@ -173,6 +173,9 @@ MakefileGenerator::initOutPaths()
if (noIO() || (project->first("TEMPLATE") == "subdirs"))
continue;
if (inhibitMakeDirOutPath(dkey))
continue;
QString path = project->first(dkey).toQString(); //not to be changed any further
path = fileFixify(path, FileFixifyBackwards);
debug_msg(3, "Fixed output_dir %s (%s) into %s", dirs[x],
@ -216,6 +219,18 @@ MakefileGenerator::initOutPaths()
}
}
/*
* For the given directory path, return true if MakefileGenerator::initOutPaths() should inhibit the
* creation of the directory. Overload this in subclasses.
*/
bool
MakefileGenerator::inhibitMakeDirOutPath(const ProKey &path) const
{
Q_UNUSED(path);
return false;
}
QMakeProject
*MakefileGenerator::projectFile() const
{

View File

@ -160,6 +160,7 @@ protected:
void verifyCompilers();
virtual void init();
void initOutPaths();
virtual bool inhibitMakeDirOutPath(const ProKey &path) const;
struct Compiler
{
QString variable_in;