summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/compileroptionsbuilder.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2018-07-10 15:53:51 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2018-08-13 13:24:12 +0000
commitf60b0352953b06d1a69e2b8b2ed117eab17135f9 (patch)
tree4d2a99c75a427d1e1a6d76cf1a16697f76ae35c8 /src/plugins/cpptools/compileroptionsbuilder.cpp
parent934e9b2e197199522d425af55b327108c255ae61 (diff)
downloadqt-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.cpp140
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 &macros)
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)