summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp23
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h2
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();