diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index abd515f1a0f..e62893b5a97 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -56,6 +56,7 @@ #include #include +#include #include #include @@ -372,6 +373,27 @@ QString CMakeBuildSystem::reparseParametersString(int reparseFlags) return result.trimmed(); } +void CMakeBuildSystem::writeConfigurationIntoBuildDirectory() +{ + const Utils::MacroExpander *expander = cmakeBuildConfiguration()->macroExpander(); + const FilePath buildDir = workDirectory(m_parameters); + QTC_ASSERT(buildDir.exists(), return ); + + const FilePath settingsFile = buildDir.pathAppended("qtcsettings.cmake"); + + QByteArray contents; + contents.append("# This file is managed by Qt Creator, do not edit!\n\n"); + contents.append( + transform(cmakeBuildConfiguration()->configurationChanges(), + [expander](const CMakeConfigItem &item) { return item.toCMakeSetLine(expander); }) + .join('\n') + .toUtf8()); + + QFile file(settingsFile.toString()); + QTC_ASSERT(file.open(QFile::WriteOnly | QFile::Truncate), return ); + file.write(contents); +} + void CMakeBuildSystem::setParametersAndRequestParse(const BuildDirParameters ¶meters, const int reparseParameters) { @@ -405,6 +427,8 @@ void CMakeBuildSystem::setParametersAndRequestParse(const BuildDirParameters &pa m_reader.setParameters(m_parameters); + writeConfigurationIntoBuildDirectory(); + if (reparseParameters & REPARSE_URGENT) { qCDebug(cmakeBuildSystemLog) << "calling requestReparse"; requestParse(); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 283990ed7be..997fdc7fdc0 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -29,7 +29,6 @@ #include "cmakebuildtarget.h" #include "cmakeprojectnodes.h" #include "fileapireader.h" -#include "utils/macroexpander.h" #include @@ -155,6 +154,8 @@ private: void runCTest(); + void writeConfigurationIntoBuildDirectory(); + ProjectExplorer::TreeScanner m_treeScanner; QHash m_mimeBinaryCache; QList m_allFiles;