summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp18
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h14
2 files changed, 26 insertions, 6 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index 9113d69747..1dbcff2e03 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -44,13 +44,15 @@ namespace CppTools {
CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart,
UseSystemHeader useSystemHeader,
SkipBuiltIn skipBuiltInHeaderPathsAndDefines,
+ SkipLanguageDefines skipLanguageDefines,
QString clangVersion,
QString clangResourceDirectory)
: m_projectPart(projectPart)
- , m_useSystemHeader(useSystemHeader)
, m_clangVersion(clangVersion)
, m_clangResourceDirectory(clangResourceDirectory)
+ , m_useSystemHeader(useSystemHeader)
, m_skipBuiltInHeaderPathsAndDefines(skipBuiltInHeaderPathsAndDefines)
+ , m_skipLanguageDefines(skipLanguageDefines)
{
}
@@ -601,8 +603,18 @@ bool CompilerOptionsBuilder::excludeDefineDirective(const ProjectExplorer::Macro
{
// Avoid setting __cplusplus & co as this might conflict with other command line flags.
// Clang should set __cplusplus based on -std= and -fms-compatibility-version version.
- QTC_ASSERT(macro.key != "__cplusplus", return true);
- QTC_ASSERT(macro.key != "__STDC_VERSION__", return true);
+ static const auto languageDefines = {"__cplusplus",
+ "__STDC_VERSION__",
+ "_MSC_BUILD",
+ "_MSVC_LANG",
+ "_MSC_FULL_VER",
+ "_MSC_VER"};
+ if (m_skipLanguageDefines == SkipLanguageDefines::Yes
+ && std::find(languageDefines.begin(),
+ languageDefines.end(),
+ macro.key) != languageDefines.end()) {
+ return true;
+ }
// Ignore for all compiler toolchains since LLVM has it's own implementation for
// __has_include(STR) and __has_include_next(STR)
diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h
index 1274c1b860..67a7345a30 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.h
+++ b/src/plugins/cpptools/compileroptionsbuilder.h
@@ -31,13 +31,19 @@
namespace CppTools {
-enum class UseSystemHeader
+enum class UseSystemHeader : char
{
Yes,
No
};
-enum class SkipBuiltIn
+enum class SkipBuiltIn : char
+{
+ Yes,
+ No
+};
+
+enum class SkipLanguageDefines : char
{
Yes,
No
@@ -54,6 +60,7 @@ public:
CompilerOptionsBuilder(const ProjectPart &projectPart,
UseSystemHeader useSystemHeader = UseSystemHeader::No,
SkipBuiltIn skipBuiltInHeaderPathsAndDefines = SkipBuiltIn::No,
+ SkipLanguageDefines skipLanguageDefines = SkipLanguageDefines::Yes,
QString clangVersion = QString(),
QString clangResourceDirectory = QString());
@@ -107,12 +114,13 @@ private:
void addWrappedQtHeadersIncludePath(QStringList &list);
QStringList m_options;
- UseSystemHeader m_useSystemHeader;
QString m_clangVersion;
QString m_clangResourceDirectory;
+ UseSystemHeader m_useSystemHeader;
SkipBuiltIn m_skipBuiltInHeaderPathsAndDefines;
+ SkipLanguageDefines m_skipLanguageDefines;
};
} // namespace CppTools