From 66237a6e0401b0638e91c1fe3c8cefa7330db03d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 30 Apr 2019 15:05:37 +0200 Subject: [PATCH] QmakePM: Only consider the first make step for subproject builds When the user requests to build a sub-project or a single file of a qmake project, we simply run the normal steps from the build configuration, and the make steps modify themselves to run in the respective subdirectory and/or with specific targets. Normally, there is only one such make step. If the user added more make steps, it is very likely that these only make sense for a top-level build, so we simply make them no-ops when building a sub-project or single file. Fixes: QTCREATORBUG-15794 Change-Id: I960cf60dba5e5d6b6e839d35e34650427f659110 Reviewed-by: Mitch Curtis Reviewed-by: Joerg Bornemann --- src/plugins/qmakeprojectmanager/qmakemakestep.cpp | 6 +++++- src/plugins/qmakeprojectmanager/qmakemakestep.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmakeprojectmanager/qmakemakestep.cpp b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp index 77351d4ef9f..8de452e0a2c 100644 --- a/src/plugins/qmakeprojectmanager/qmakemakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp @@ -83,6 +83,10 @@ bool QmakeMakeStep::init() return false; } + // Ignore all but the first make step for a non-top-level build. See QTCREATORBUG-15794. + m_ignoredNonTopLevelBuild = (bc->fileNodeBuild() || bc->subNodeBuild()) + && static_cast(parent())->firstOfType() != this; + ProcessParameters *pp = processParameters(); pp->setMacroExpander(bc->macroExpander()); @@ -177,7 +181,7 @@ bool QmakeMakeStep::init() void QmakeMakeStep::doRun() { - if (m_scriptTarget) { + if (m_scriptTarget || m_ignoredNonTopLevelBuild) { emit finished(true); return; } diff --git a/src/plugins/qmakeprojectmanager/qmakemakestep.h b/src/plugins/qmakeprojectmanager/qmakemakestep.h index b8142feff6e..d1d78d19991 100644 --- a/src/plugins/qmakeprojectmanager/qmakemakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakemakestep.h @@ -62,6 +62,7 @@ private: bool m_scriptTarget = false; QString m_makeFileToCheck; bool m_unalignedBuildDir; + bool m_ignoredNonTopLevelBuild = false; }; } // QmakeProjectManager