forked from qt-creator/qt-creator
ClangCodeModel: Use more suitable location for compile_commands.json
... for clangd. Putting it in the build directory seems sensible in principle, but that can be problematic for in-source builds. So introduce another level of nesting to prevent conflicts. Fixes: QTCREATORBUG-26431 Change-Id: Id66aa0852d206695f2fc2ec42292b1cecefe2b59 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -82,7 +82,7 @@ void ClangCodeModelPlugin::generateCompilationDB()
|
||||
|
||||
QFuture<GenerateCompilationDbResult> task
|
||||
= QtConcurrent::run(&Internal::generateCompilationDB, projectInfo,
|
||||
CompilationDbPurpose::Project,
|
||||
projectInfo->buildRoot(), CompilationDbPurpose::Project,
|
||||
warningsConfigForProject(target->project()),
|
||||
optionsForProject(target->project()));
|
||||
Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db");
|
||||
|
@@ -286,7 +286,7 @@ void ClangModelManagerSupport::updateLanguageClient(
|
||||
if (const ProjectExplorer::Target * const target = project->activeTarget()) {
|
||||
if (const ProjectExplorer::BuildConfiguration * const bc
|
||||
= target->activeBuildConfiguration()) {
|
||||
return bc->buildDirectory();
|
||||
return bc->buildDirectory() / ".qtc_clangd";
|
||||
}
|
||||
}
|
||||
return Utils::FilePath();
|
||||
@@ -363,7 +363,7 @@ void ClangModelManagerSupport::updateLanguageClient(
|
||||
});
|
||||
|
||||
});
|
||||
auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo,
|
||||
auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, jsonDbDir,
|
||||
CompilationDbPurpose::CodeModel,
|
||||
warningsConfigForProject(project),
|
||||
optionsForProject(project));
|
||||
|
@@ -372,18 +372,15 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
||||
}
|
||||
|
||||
GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::ConstPtr projectInfo,
|
||||
const Utils::FilePath &baseDir,
|
||||
CompilationDbPurpose purpose,
|
||||
const ClangDiagnosticConfig &warningsConfig,
|
||||
const QStringList &projectOptions)
|
||||
{
|
||||
const FilePath buildDir = projectInfo->buildRoot();
|
||||
QTC_ASSERT(!buildDir.isEmpty(), return GenerateCompilationDbResult(QString(),
|
||||
QTC_ASSERT(!baseDir.isEmpty(), return GenerateCompilationDbResult(QString(),
|
||||
QCoreApplication::translate("ClangUtils", "Could not retrieve build directory.")));
|
||||
|
||||
QDir dir(buildDir.toString());
|
||||
if (!dir.exists())
|
||||
dir.mkpath(dir.path());
|
||||
QFile compileCommandsFile(buildDir.toString() + "/compile_commands.json");
|
||||
QTC_CHECK(baseDir.ensureWritableDir());
|
||||
QFile compileCommandsFile(baseDir.toString() + "/compile_commands.json");
|
||||
const bool fileOpened = compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
|
||||
if (!fileOpened) {
|
||||
return GenerateCompilationDbResult(QString(),
|
||||
@@ -397,7 +394,7 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
||||
if (purpose == CompilationDbPurpose::Project)
|
||||
args = projectPartArguments(*projectPart);
|
||||
for (const ProjectFile &projFile : projectPart->files) {
|
||||
const QJsonObject json = createFileObject(buildDir, args, *projectPart, projFile,
|
||||
const QJsonObject json = createFileObject(baseDir, args, *projectPart, projFile,
|
||||
purpose, warningsConfig, projectOptions);
|
||||
if (compileCommandsFile.size() > 1)
|
||||
compileCommandsFile.write(",");
|
||||
|
@@ -88,8 +88,8 @@ public:
|
||||
|
||||
enum class CompilationDbPurpose { Project, CodeModel };
|
||||
GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::ConstPtr projectInfo,
|
||||
CompilationDbPurpose purpose, const CppEditor::ClangDiagnosticConfig &warningsConfig,
|
||||
const QStringList &projectOptions);
|
||||
const Utils::FilePath &baseDir, CompilationDbPurpose purpose,
|
||||
const CppEditor::ClangDiagnosticConfig &warningsConfig, const QStringList &projectOptions);
|
||||
|
||||
class DiagnosticTextInfo
|
||||
{
|
||||
|
Reference in New Issue
Block a user