aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2019-03-13 14:31:50 +0100
committerIvan Donchevskii <ivan.donchevskii@qt.io>2019-03-14 07:36:38 +0000
commitd2154e6c40856ff4f044210a928587f3b06ec344 (patch)
tree3d23100d51cce3ce7607c8c1e6845ac920ad679f /src/plugins/clangcodemodel
parenta0072afd492d9653d035b3217ddda954154b2d24 (diff)
Clang: Save compilation database to the build directory
For example CMake puts compile_commands.json into the build directory and it makes sense because it uses some target-specific command line options. Change-Id: I92a5b391f35e3f75bbcf41b8efff448f197895bb Reviewed-by: Marco Bubke <marco.bubke@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel')
-rw-r--r--src/plugins/clangcodemodel/clangcodemodelplugin.cpp9
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp14
-rw-r--r--src/plugins/clangcodemodel/clangutils.h2
3 files changed, 14 insertions, 11 deletions
diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
index 11de94c395..a4a1591cf4 100644
--- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
+++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
@@ -68,13 +68,12 @@ void ClangCodeModelPlugin::generateCompilationDB() {
using namespace CppTools;
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
- if (!project)
+ if (!project || !project->activeTarget())
return;
- m_generatorWatcher.setFuture(QtConcurrent::run(
- &Utils::generateCompilationDB,
- project->projectDirectory(),
- CppModelManager::instance()->projectInfo(project)));
+ m_generatorWatcher.setFuture(
+ QtConcurrent::run(&Utils::generateCompilationDB,
+ CppModelManager::instance()->projectInfo(project)));
}
static bool isDBGenerationEnabled(ProjectExplorer::Project *project)
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index c8e74f663f..599b561011 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -313,9 +313,9 @@ static ::Utils::FileName compilerPath(const CppTools::ProjectPart &projectPart)
return toolchain->compilerCommand();
}
-static ::Utils::FileName buildDirectory(const CppTools::ProjectPart &projectPart)
+static ::Utils::FileName buildDirectory(const ProjectExplorer::Project &project)
{
- ProjectExplorer::Target *target = projectPart.project->activeTarget();
+ ProjectExplorer::Target *target = project.activeTarget();
if (!target)
return ::Utils::FileName();
@@ -386,17 +386,21 @@ static QJsonObject createFileObject(const ::Utils::FileName &buildDir,
return fileObject;
}
-void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo projectInfo)
+void generateCompilationDB(CppTools::ProjectInfo projectInfo)
{
- QFile compileCommandsFile(projectDir.toString() + "/compile_commands.json");
+ const ::Utils::FileName buildDir = buildDirectory(*projectInfo.project());
+ QTC_ASSERT(!buildDir.isEmpty(), return;);
+ QDir dir(buildDir.toString());
+ if (!dir.exists())
+ dir.mkpath(dir.path());
+ QFile compileCommandsFile(buildDir.toString() + "/compile_commands.json");
const bool fileOpened = compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
if (!fileOpened)
return;
compileCommandsFile.write("[");
for (ProjectPart::Ptr projectPart : projectInfo.projectParts()) {
- const ::Utils::FileName buildDir = buildDirectory(*projectPart);
const QStringList args = projectPartArguments(*projectPart);
for (const ProjectFile &projFile : projectPart->files) {
const QJsonObject json = createFileObject(buildDir, args, *projectPart, projFile);
diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h
index 4db869896b..8ced14f5ad 100644
--- a/src/plugins/clangcodemodel/clangutils.h
+++ b/src/plugins/clangcodemodel/clangutils.h
@@ -70,7 +70,7 @@ QString diagnosticCategoryPrefixRemoved(const QString &text);
::Utils::CodeModelIcon::Type iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token);
-void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo projectInfo);
+void generateCompilationDB(CppTools::ProjectInfo projectInfo);
class DiagnosticTextInfo
{