diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index e4581419faf..dae5d277fd2 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -566,7 +566,7 @@ WarningFlags GccToolChain::warningFlags(const QStringList &cflags) const QStringList GccToolChain::includedFiles(const QStringList &flags, const QString &directoryPath) const { - return ToolChain::includedFiles("-include", flags, directoryPath); + return ToolChain::includedFiles("-include", flags, directoryPath, PossiblyConcatenatedFlag::No); } QStringList GccToolChain::gccPrepareArguments(const QStringList &flags, diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index e3f506c0595..d86a0ce116c 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1113,7 +1113,7 @@ WarningFlags MsvcToolChain::warningFlags(const QStringList &cflags) const QStringList MsvcToolChain::includedFiles(const QStringList &flags, const QString &directoryPath) const { - return ToolChain::includedFiles("/FI", flags, directoryPath); + return ToolChain::includedFiles("/FI", flags, directoryPath, PossiblyConcatenatedFlag::Yes); } ToolChain::BuiltInHeaderPathsRunner MsvcToolChain::createBuiltInHeaderPathsRunner( diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index cca95c8158a..fbbc748d8e9 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -468,13 +468,23 @@ Utils::LanguageVersion ToolChain::languageVersion(const Utils::Id &language, con QStringList ToolChain::includedFiles(const QString &option, const QStringList &flags, - const QString &directoryPath) + const QString &directoryPath, + PossiblyConcatenatedFlag possiblyConcatenated) { QStringList result; for (int i = 0; i < flags.size(); ++i) { - if (flags[i] == option && i + 1 < flags.size()) { - QString includeFile = flags[++i]; + QString includeFile; + const QString flag = flags[i]; + if (possiblyConcatenated == PossiblyConcatenatedFlag::Yes + && flag.startsWith(option) + && flag.size() > option.size()) { + includeFile = flag.mid(option.size()); + } + if (includeFile.isEmpty() && flag == option && i + 1 < flags.size()) + includeFile = flags[++i]; + + if (!includeFile.isEmpty()) { if (!QFileInfo(includeFile).isAbsolute()) includeFile = directoryPath + "/" + includeFile; result.append(QDir::cleanPath(includeFile)); diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index fb9c622246a..807e0c5671c 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -185,9 +185,11 @@ protected: // Make sure to call this function when deriving! virtual bool fromMap(const QVariantMap &data); + enum class PossiblyConcatenatedFlag { No, Yes }; static QStringList includedFiles(const QString &option, const QStringList &flags, - const QString &directoryPath); + const QString &directoryPath, + PossiblyConcatenatedFlag possiblyConcatenated); private: ToolChain(const ToolChain &) = delete;