diff --git a/src/plugins/cmakeprojectmanager/fileapiparser.cpp b/src/plugins/cmakeprojectmanager/fileapiparser.cpp index 5038f2e85e3..09fbb5958fb 100644 --- a/src/plugins/cmakeprojectmanager/fileapiparser.cpp +++ b/src/plugins/cmakeprojectmanager/fileapiparser.cpp @@ -838,6 +838,7 @@ static QStringList uniqueTargetFiles(const Configuration &config) FileApiData FileApiParser::parseData(QPromise> &promise, const FilePath &replyFilePath, + const Utils::FilePath &buildDir, const QString &cmakeBuildType, QString &errorMessage) { @@ -857,7 +858,11 @@ FileApiData FileApiParser::parseData(QPromise> & result.replyFile = readReplyFile(replyFilePath, errorMessage); if (cancelCheck()) return {}; - result.cache = readCacheFile(result.replyFile.jsonFile("cache", replyDir), errorMessage); + const FilePath cachePathFromReply = result.replyFile.jsonFile("cache", replyDir); + if (cachePathFromReply.isEmpty()) + result.cache = CMakeConfig::fromFile(buildDir / "CMakeCache.txt", &errorMessage); + else + result.cache = readCacheFile(cachePathFromReply, errorMessage); if (cancelCheck()) return {}; result.cmakeFiles = readCMakeFilesFile(result.replyFile.jsonFile("cmakeFiles", replyDir), diff --git a/src/plugins/cmakeprojectmanager/fileapiparser.h b/src/plugins/cmakeprojectmanager/fileapiparser.h index 900f630cf7e..9043d38c260 100644 --- a/src/plugins/cmakeprojectmanager/fileapiparser.h +++ b/src/plugins/cmakeprojectmanager/fileapiparser.h @@ -223,6 +223,7 @@ class FileApiParser public: static FileApiData parseData(QPromise> &promise, const Utils::FilePath &replyFilePath, + const Utils::FilePath &buildDir, const QString &cmakeBuildType, QString &errorMessage); diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index ee1edb26c02..74e78c564e4 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -263,6 +263,7 @@ void FileApiReader::endState(const FilePath &replyFilePath, bool restoredFromBac auto result = std::make_shared(); FileApiData data = FileApiParser::parseData(promise, replyFilePath, + buildDirectory, cmakeBuildType, result->errorMessage); if (result->errorMessage.isEmpty()) { @@ -270,6 +271,7 @@ void FileApiReader::endState(const FilePath &replyFilePath, bool restoredFromBac sourceDirectory, buildDirectory); } else { qWarning() << result->errorMessage; + result->cache = std::move(data.cache); } promise.addResult(result);