diff options
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 23 | ||||
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.h | 2 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index e2858fb368..109613d2c0 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -172,6 +172,14 @@ void CompilerOptionsBuilder::addSyntaxOnly() isClStyle() ? add("/Zs") : add("-fsyntax-only"); } +void CompilerOptionsBuilder::remove(const QStringList &args) +{ + auto foundPos = std::search(m_options.begin(), m_options.end(), + args.begin(), args.end()); + if (foundPos != m_options.end()) + m_options.erase(foundPos, std::next(foundPos, args.size())); +} + QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) { QStringList options; @@ -320,11 +328,18 @@ void CompilerOptionsBuilder::addHeaderPathOptions() void CompilerOptionsBuilder::addPrecompiledHeaderOptions(UsePrecompiledHeaders usePrecompiledHeaders) { - if (usePrecompiledHeaders == UsePrecompiledHeaders::No) - return; - for (const QString &pchFile : m_projectPart.precompiledHeaders) { - if (QFile::exists(pchFile)) { + // Bail if build system precomiple header artifacts exists + // Clang cannot handle foreign PCH files. + if (QFile::exists(pchFile + ".gch") || QFile::exists(pchFile + ".pch")) + usePrecompiledHeaders = UsePrecompiledHeaders::No; + + if (usePrecompiledHeaders == UsePrecompiledHeaders::No) { + // CMake PCH will already have force included the header file in + // command line options, remove it if exists. + remove({isClStyle() ? QLatin1String(includeFileOptionCl) + : QLatin1String(includeFileOptionGcc), pchFile}); + } else if (QFile::exists(pchFile)) { add({isClStyle() ? QLatin1String(includeFileOptionCl) : QLatin1String(includeFileOptionGcc), QDir::toNativeSeparators(pchFile)}); diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 349279710a..5b7c682407 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -85,6 +85,8 @@ public: void add(const QStringList &args, bool gccOnlyOptions = false); virtual void addExtraOptions() {} + void remove(const QStringList &args); + static UseToolchainMacros useToolChainMacros(); void reset(); |