diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp index c97bab5a38c..a04657aa407 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp @@ -265,19 +265,30 @@ void QmakeProjectImporter::deleteDirectoryData(void *directoryData) const delete static_cast(directoryData); } -static ToolChain *preferredToolChain(BaseQtVersion *qtVersion, const FileName &ms, - const QMakeStepConfig::TargetArchConfig &archConfig) +static const QList preferredToolChains(BaseQtVersion *qtVersion, const FileName &ms, + const QMakeStepConfig::TargetArchConfig &archConfig) { const FileName spec = ms.isEmpty() ? qtVersion->mkspec() : ms; const QList toolchains = ToolChainManager::toolChains(); QList qtAbis = qtVersion->qtAbis(); - return findOr(toolchains, toolchains.isEmpty() ? nullptr : toolchains.first(), - [&](ToolChain *tc) { + const auto matcher = [&](const ToolChain *tc) { return qtAbis.contains(tc->targetAbi()) - && tc->suggestedMkspecList().contains(spec) - && QMakeStepConfig::targetArchFor(tc->targetAbi(), qtVersion) == archConfig; + && tc->suggestedMkspecList().contains(spec) + && QMakeStepConfig::targetArchFor(tc->targetAbi(), qtVersion) == archConfig; + }; + ToolChain * const cxxToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) { + return tc->language() == ProjectExplorer::Constants::CXX_LANGUAGE_ID && matcher(tc); }); + ToolChain * const cToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) { + return tc->language() == ProjectExplorer::Constants::C_LANGUAGE_ID && matcher(tc); + }); + QList chosenToolchains; + for (ToolChain * const tc : {cxxToolchain, cToolchain}) { + if (tc) + chosenToolchains << tc; + }; + return chosenToolchains; } Kit *QmakeProjectImporter::createTemporaryKit(const QtProjectImporter::QtVersionData &data, @@ -288,7 +299,8 @@ Kit *QmakeProjectImporter::createTemporaryKit(const QtProjectImporter::QtVersion Q_UNUSED(osType); // TODO use this to select the right toolchain? return QtProjectImporter::createTemporaryKit(data, [&data, parsedSpec, archConfig](Kit *k) -> void { - ToolChainKitInformation::setToolChain(k, preferredToolChain(data.qt, parsedSpec, archConfig)); + for (ToolChain * const tc : preferredToolChains(data.qt, parsedSpec, archConfig)) + ToolChainKitInformation::setToolChain(k, tc); if (parsedSpec != data.qt->mkspec()) QmakeKitInformation::setMkspec(k, parsedSpec); });