diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
index c5f1b6a8f38ff2a86a54dc2b06cfc725e6763b36..ff2a3d2c9a6a0b7d2ec1ff4bb898e816d3fdbf8d 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
@@ -217,6 +217,22 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
         return false;
     }
 
+    // Warn if doing out-of-source builds with a CMakeCache.txt is the source directory
+    const Utils::FileName projectDirectory = bc->target()->project()->projectDirectory();
+    if (bc->buildDirectory() != projectDirectory) {
+        Utils::FileName cmc = projectDirectory;
+        cmc.appendPath("CMakeCache.txt");
+        if (cmc.exists()) {
+            emit addTask(Task(Task::Warning,
+                              tr("There is a CMakeCache.txt file in \"%1\", which suggest an "
+                                 "in-source build was done before. You are now building in \"%2\", "
+                                 "and the CMakeCache.txt file might confuse CMake.")
+                              .arg(projectDirectory.toUserOutput(), bc->buildDirectory().toUserOutput()),
+                              Utils::FileName(), -1,
+                              ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
+        }
+    }
+
     QString arguments = allArguments(rc);
 
     setIgnoreReturnValue(m_buildTarget == CMakeBuildStep::cleanTarget());