[Qt-creator] Update QtCreator kits thru plugin
Antonio Di Monaco
tony at becrux.com
Thu Dec 28 17:51:41 CET 2017
Hi Arun,
unfortunately I cannot share the code, but I can provide you some basic steps in order to do that. Please note that what I'm posting is just the result of my understanding of the Qt Creator code, so I could be not correct 100%. I was not able to find any kind of documentation, so YMMV.
Basically, you need to create a toolchain first. You can subclass from ProjectExplorer::GccToolchain, in order to create a GCC/Clang toolchain, or ProjectExplorer::Internal::AbstractMsvcToolchain, for MSVC compiler (yeah, that should not be allowed, but there are no MSVC base classes that are exported through the PROJECTEXPLORER_EXPORT macro. Anyway, it works, you just need some code from MsvcToolchain class).
Once you have it, create a Kit in your Project class. You can do it in the fromMap method, for example (called when your project is loaded):
ProjectExplorer::Kit *kit = new ProjectExplorer::Kit(YOUR_ID);
kit->setUnexpandedDisplayName(YOUR_DISPLAY_NAME);
kit->setAutoDetected(false);
You can add your personal values too, using:
kit->setValueSilently(KEY, VALUE);
that you can access later calling kit->value(KEY).
Then, you can add all the required information:
- sysroot:
ProjectExplorer::SysRootKitInformation::setSysRoot(kit, PATH_OF_THE_SYSROOT);
- toolchain:
ProjectExplorer::ToolChain *tc = new Your_ToolChain_Class(...);
ProjectExplorer::ToolChainManager::registerToolChain(tc);
ProjectExplorer::ToolChainKitInformation::setToolChain(kit, tc);
you can add one for C, and one for C++, according to the LanguageId that you specify in Your_ToolChain_Class.
- If you have a CMake configuration for your kit, you can add it too:
/* vvvvv do this group once vvvvv */
CMakeProjectManager::CMakeTool *cmakeTool = new CMakeProjectManager::CMakeTool(CMakeProjectManager::CMakeTool::ManualDetection, THE_ID_OF_YOUR_CMAKE_COMMAND);
cmakeTool->setAutorun(false);
cmakeTool->setCMakeExecutable("....");
cmakeTool->setDisplayName("....");
CMakeProjectManager::CMakeToolManager::registerCMakeTool(cmakeTool);
/* ^^^^^ do this group once ^^^^^^ */
CMakeProjectManager::CMakeKitInformation::setCMakeTool(kit, THE_ID_OF_YOUR_CMAKE_COMMAND);
CMakeProjectManager::CMakeGeneratorKitInformation::setGenerator(kit, "...");
CMakeProjectManager::CMakeGeneratorKitInformation::setExtraGenerator(kit, "....");
CMakeProjectManager::CMakeConfigurationKitInformation::setConfiguration(kit, CMakeProjectManager::CMakeConfig(...));
- Qt can be set up in a similar way. Unfortunately, I don't know how, cause I'm not using Qt libraries for my kit, so I clear out the information in the kit:
QmakeProjectManager::QmakeKitInformation::setMkspec(kit, Utils::FileName());
QtSupport::QtKitInformation::setQtVersionId(kit, 0);
Maybe you can have a look at those function calls, and specify different parameters.
- Debugger:
Debugger::DebuggerItem debugger;
debugger.setCommand("...");
debugger.setEngineType(Debugger::GdbEngineType or Debugger::CdbEngineType);
debugger.setUnexpandedDisplayName("...");
debugger.setAutoDetected(true);
debugger.setAbi(tc->targetAbi());
debugger.setWorkingDirectory("...");
debugger.reinitializeFromFile();
Debugger::DebuggerKitInformation::setDebugger(kit, Debugger::DebuggerItemManager::registerDebugger(debugger));
- Device type (Desktop in my case):
ProjectExplorer::DeviceTypeKitInformation::setDeviceTypeId(kit, ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
When you're done, you register the kit:
ProjectExplorer::KitManager::registerKit(kit);
In order to consume it, you need a target:
ProjectExplorer::Target *tgt = createTarget(kit);
tgt->setDefaultDisplayName("...");tgt->setDisplayName("...");addTarget(tgt);
That's it.
Toolchains can be unregistered using:
ProjectExplorer::ToolChainKitInformation::clearToolChain(kit, tc->language());ProjectExplorer::ToolChainManager::deregisterToolChain(tc);
So the debugger:
const Debugger::DebuggerItem *dbgItem = Debugger::DebuggerKitInformation::debugger(kit);
if (dbgItem)
Debugger::DebuggerItemManager::deregisterDebugger(dbgItem->id());
the kit:
ProjectExplorer::KitManager::deregisterKit(kit);
and your CMake tool:
CMakeProjectManager::CMakeToolManager::deregisterCMakeTool(THE_ID_OF_YOUR_CMAKE_COMMAND);
Those are the basics. If you need more help, please ask for a specific topic, cause it's very wide to be fully explained.
Hope that this will help you.
BR,
Antonio
From: "Vidhya Arun" svidhyapria at gmail.com
To: "Antonio Di Monaco" tony at becrux.com
Cc: qt-creator at qt-project.org
Date: Wed, 27 Dec 2017 16:45:01 +0000
Subject: [Qt-creator] Update QtCreator kits thru plugin
Hi
I am trying to create my plugin to create the kit to update sysroot, target connection details,etc.
But I couldn't locate how to update sysroot and other details of Qt creator thru plugin. Any suggestions would be appreciated.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qt-creator/attachments/20171228/350e0284/attachment.html>
More information about the Qt-creator
mailing list