diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-07-10 15:53:51 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-08-13 13:24:12 +0000 |
commit | f60b0352953b06d1a69e2b8b2ed117eab17135f9 (patch) | |
tree | 4d2a99c75a427d1e1a6d76cf1a16697f76ae35c8 /src/plugins/cpptools/compileroptionsbuilder.cpp | |
parent | 934e9b2e197199522d425af55b327108c255ae61 (diff) | |
download | qt-creator-f60b0352953b06d1a69e2b8b2ed117eab17135f9.tar.gz |
Clang: Add button to generate compile_commands.json
Change-Id: Iaabdcfc8d1b3463c3f6e5ce47536f9c52556eac0
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 140 |
1 files changed, 75 insertions, 65 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 5e5721dc7c..041cbf607b 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -28,7 +28,6 @@ #include <coreplugin/icore.h> #include <coreplugin/vcsmanager.h> -#include <projectexplorer/project.h> #include <projectexplorer/projectexplorerconstants.h> #include <utils/fileutils.h> @@ -53,10 +52,12 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind, return QStringList();); } + add("-c"); + addWordWidth(); addTargetTriple(); addExtraCodeModelFlags(); - addLanguageOption(fileKind); + updateLanguageOption(fileKind); addOptionsForLanguage(/*checkForBorlandExtensions*/ true); enableExceptions(); @@ -77,6 +78,67 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind, return options(); } +static QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) +{ + QStringList opts; + + switch (fileKind) { + case ProjectFile::Unclassified: + case ProjectFile::Unsupported: + break; + case ProjectFile::CHeader: + if (objcExt) + opts += QLatin1String("objective-c-header"); + else + opts += QLatin1String("c-header"); + break; + + case ProjectFile::CXXHeader: + default: + if (!objcExt) { + opts += QLatin1String("c++-header"); + break; + } + Q_FALLTHROUGH(); + case ProjectFile::ObjCHeader: + case ProjectFile::ObjCXXHeader: + opts += QLatin1String("objective-c++-header"); + break; + + case ProjectFile::CSource: + if (!objcExt) { + opts += QLatin1String("c"); + break; + } + Q_FALLTHROUGH(); + case ProjectFile::ObjCSource: + opts += QLatin1String("objective-c"); + break; + + case ProjectFile::CXXSource: + if (!objcExt) { + opts += QLatin1String("c++"); + break; + } + Q_FALLTHROUGH(); + case ProjectFile::ObjCXXSource: + opts += QLatin1String("objective-c++"); + break; + + case ProjectFile::OpenCLSource: + opts += QLatin1String("cl"); + break; + case ProjectFile::CudaSource: + opts += QLatin1String("cuda"); + break; + } + + if (!opts.isEmpty()) + opts.prepend(QLatin1String("-x")); + + return opts; +} + QStringList CompilerOptionsBuilder::options() const { return m_options; @@ -197,72 +259,20 @@ void CompilerOptionsBuilder::addMacros(const ProjectExplorer::Macros ¯os) m_options.append(result); } -static QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) -{ - QStringList opts; - - switch (fileKind) { - case ProjectFile::Unclassified: - case ProjectFile::Unsupported: - break; - case ProjectFile::CHeader: - if (objcExt) - opts += QLatin1String("objective-c-header"); - else - opts += QLatin1String("c-header"); - break; - - case ProjectFile::CXXHeader: - default: - if (!objcExt) { - opts += QLatin1String("c++-header"); - break; - } - Q_FALLTHROUGH(); - case ProjectFile::ObjCHeader: - case ProjectFile::ObjCXXHeader: - opts += QLatin1String("objective-c++-header"); - break; - - case ProjectFile::CSource: - if (!objcExt) { - opts += QLatin1String("c"); - break; - } - Q_FALLTHROUGH(); - case ProjectFile::ObjCSource: - opts += QLatin1String("objective-c"); - break; - - case ProjectFile::CXXSource: - if (!objcExt) { - opts += QLatin1String("c++"); - break; - } - Q_FALLTHROUGH(); - case ProjectFile::ObjCXXSource: - opts += QLatin1String("objective-c++"); - break; - - case ProjectFile::OpenCLSource: - opts += QLatin1String("cl"); - break; - case ProjectFile::CudaSource: - opts += QLatin1String("cuda"); - break; - } - - if (!opts.isEmpty()) - opts.prepend(QLatin1String("-x")); - - return opts; -} - -void CompilerOptionsBuilder::addLanguageOption(ProjectFile::Kind fileKind) +void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind) { const bool objcExt = m_projectPart.languageExtensions & ProjectPart::ObjectiveCExtensions; const QStringList options = createLanguageOptionGcc(fileKind, objcExt); - m_options.append(options); + if (options.isEmpty()) + return; + + QTC_ASSERT(options.size() == 2, return;); + int langOptIndex = m_options.indexOf("-x"); + if (langOptIndex == -1) { + m_options.append(options); + } else { + m_options[langOptIndex + 1] = options[1]; + } } void CompilerOptionsBuilder::addOptionsForLanguage(bool checkForBorlandExtensions) |