diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 812de0fb598..8ec63484f97 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -43,14 +43,14 @@ namespace CppTools { CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart, UseSystemHeader useSystemHeader, - SkipBuiltIn skipBuiltInHeaderPaths, + SkipBuiltIn skipBuiltInHeaderPathsAndDefines, QString clangVersion, QString clangResourceDirectory) : m_projectPart(projectPart) , m_useSystemHeader(useSystemHeader) , m_clangVersion(clangVersion) , m_clangResourceDirectory(clangResourceDirectory) - , m_skipBuiltInHeaderPaths(skipBuiltInHeaderPaths) + , m_skipBuiltInHeaderPathsAndDefines(skipBuiltInHeaderPathsAndDefines) { } @@ -85,7 +85,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind, undefineCppLanguageFeatureMacrosForMsvc2015(); addDefineFunctionMacrosMsvc(); - addGlobalUndef(); + addToolchainFlags(); addPrecompiledHeaderOptions(pchUsage); addHeaderPathOptions(); addProjectConfigFileInclude(); @@ -305,7 +305,7 @@ void CompilerOptionsBuilder::addHeaderPathOptions() m_options.append(includes); m_options.append(systemIncludes); - if (m_skipBuiltInHeaderPaths == SkipBuiltIn::Yes) + if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::Yes) return; // Exclude all built-in includes except Clang resource directory. @@ -351,7 +351,8 @@ void CompilerOptionsBuilder::addPrecompiledHeaderOptions(PchUsage pchUsage) void CompilerOptionsBuilder::addToolchainAndProjectMacros() { - addMacros(m_projectPart.toolChainMacros); + if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::No) + addMacros(m_projectPart.toolChainMacros); addMacros(m_projectPart.projectMacros); } @@ -634,12 +635,15 @@ void CompilerOptionsBuilder::addWrappedQtHeadersIncludePath(QStringList &list) } } -void CompilerOptionsBuilder::addGlobalUndef() +void CompilerOptionsBuilder::addToolchainFlags() { // In case of MSVC we need builtin clang defines to correctly handle clang includes if (m_projectPart.toolchainType != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID - && m_projectPart.toolchainType != ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { - add("-undef"); + && m_projectPart.toolchainType != ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { + if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::No) + add("-undef"); + else + add("-fPIC"); } } diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index c56a5cd7f74..ba29d6e4301 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -53,7 +53,7 @@ public: CompilerOptionsBuilder(const ProjectPart &projectPart, UseSystemHeader useSystemHeader = UseSystemHeader::No, - SkipBuiltIn skipBuiltInHeaderPaths = SkipBuiltIn::No, + SkipBuiltIn skipBuiltInHeaderPathsAndDefines = SkipBuiltIn::No, QString clangVersion = QString(), QString clangResourceDirectory = QString()); virtual ~CompilerOptionsBuilder() {} @@ -77,7 +77,7 @@ public: // Add options based on project part void addWordWidth(); - void addGlobalUndef(); + void addToolchainFlags(); void addHeaderPathOptions(); void addPrecompiledHeaderOptions(PchUsage pchUsage); virtual void addToolchainAndProjectMacros(); @@ -113,7 +113,7 @@ private: QString m_clangVersion; QString m_clangResourceDirectory; - SkipBuiltIn m_skipBuiltInHeaderPaths; + SkipBuiltIn m_skipBuiltInHeaderPathsAndDefines; }; } // namespace CppTools