diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index be9ce97c4865507b43c5fee19de4c547278b1a86..310a0ff8f79c66b30840e5f2dd1bb1d23dcd4ff9 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -353,6 +353,7 @@ bool CMakeProject::parseCMakeLists() QByteArray allDefines; allDefines.append(tc->predefinedMacros(cxxflags)); + allDefines.append(cbpparser.defines()); QStringList allFrameworkPaths; QList<ProjectExplorer::HeaderPath> allHeaderPaths; @@ -1215,8 +1216,18 @@ void CMakeCbpParser::parseAdd() QString compilerOption = addAttributes.value(QLatin1String("option")).toString(); // defining multiple times a macro to the same value makes no sense - if (!compilerOption.isEmpty() && !m_compilerOptions.contains(compilerOption)) + if (!compilerOption.isEmpty() && !m_compilerOptions.contains(compilerOption)) { m_compilerOptions.append(compilerOption); + int macroNameIndex = compilerOption.indexOf(QLatin1String("-D")) + 2; + if (macroNameIndex != 1) { + int assignIndex = compilerOption.indexOf(QLatin1Char('='), macroNameIndex); + if (assignIndex != -1) + compilerOption[assignIndex] = ' '; + m_defines.append("#define "); + m_defines.append(compilerOption.mid(macroNameIndex).toLatin1()); + m_defines.append('\n'); + } + } while (!atEnd()) { readNext(); @@ -1314,6 +1325,11 @@ QStringList CMakeCbpParser::includeFiles() return m_includeFiles; } +QByteArray CMakeCbpParser::defines() const +{ + return m_defines; +} + QList<CMakeBuildTarget> CMakeCbpParser::buildTargets() { return m_buildTargets; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 335bcac4a7f17a33c89eee413462166f83867513..f19422dcfc7c340eeaa96ebc29d57427a3070722 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -162,6 +162,7 @@ public: QList<ProjectExplorer::FileNode *> cmakeFileList(); QStringList includeFiles(); QList<CMakeBuildTarget> buildTargets(); + QByteArray defines() const; QString projectName() const; QString compilerName() const; bool hasCMakeFiles(); @@ -188,6 +189,7 @@ private: bool m_parsingCmakeUnit; QStringList m_includeFiles; QStringList m_compilerOptions; + QByteArray m_defines; CMakeBuildTarget m_buildTarget; QList<CMakeBuildTarget> m_buildTargets;