{"id":17978473,"url":"https://github.com/mloskot/qt-creator-plugin-boostbuild","last_synced_at":"2025-03-25T17:31:28.723Z","repository":{"id":12330374,"uuid":"14969139","full_name":"mloskot/qt-creator-plugin-boostbuild","owner":"mloskot","description":"Boost.Build Project Manager Plugin for Qt Creator","archived":false,"fork":false,"pushed_at":"2016-10-25T08:23:17.000Z","size":352,"stargazers_count":13,"open_issues_count":4,"forks_count":8,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-20T14:40:14.108Z","etag":null,"topics":["boost-build","build","ide","plugin","qtcreator","qtcreator-plugin"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mloskot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-12-05T23:53:57.000Z","updated_at":"2024-10-31T00:59:28.000Z","dependencies_parsed_at":"2022-09-07T17:35:16.357Z","dependency_job_id":null,"html_url":"https://github.com/mloskot/qt-creator-plugin-boostbuild","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloskot%2Fqt-creator-plugin-boostbuild","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloskot%2Fqt-creator-plugin-boostbuild/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloskot%2Fqt-creator-plugin-boostbuild/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloskot%2Fqt-creator-plugin-boostbuild/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mloskot","download_url":"https://codeload.github.com/mloskot/qt-creator-plugin-boostbuild/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245510686,"owners_count":20627240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boost-build","build","ide","plugin","qtcreator","qtcreator-plugin"],"created_at":"2024-10-29T17:33:52.937Z","updated_at":"2025-03-25T17:31:28.347Z","avatar_url":"https://github.com/mloskot.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Boost.Build Plugin for Qt Creator\n==============================================================================\n\nThe Boost.Build (long name: **Boost.Build Project Manager**) plugin provides basic\n[Boost.Build](http://www.boost.org/boost-build2/) support\nfor [Qt Creator](http://qt-project.org/wiki/Category:Tools::QtCreator).\n\nProject at https://github.com/mloskot/qt-creator-plugin-boostbuild.\n\nOverview\n------------------------------------------------------------------------------\n\nThe idea of the Boost.Build plugin is extremely simple - use Qt Creator as\na basic GUI shell to interact with the Boost.Build command.\n\nThree main features:\n\n* **Open** Boost.Build *Jamfile* as a project in Qt Creator.\n* **Build** project in Qt Creator according to its configuration in *Jamfile*.\n* **Parse** Boost.Build command output to enable navigation to error or warning locations.\n\nThink of the plugin as an equivalent of Vim or Emacs with ctags and bunch of other scripts.\n\nIt turns out, that in order to achieve the three basic features above,\na project manager plugin for Qt Creator needs to implement a few beefy features like:\nopening a project, reading project directory structure, creating nodes of project \nexplorer tree, creating build, run, deploy configurations and\ncorresponding build, run, deploy steps and more.\n\nSo, the Boost.Build plugin implements as little as necessary,\nand currently, it does **not** provide:\n\n* any parsing capabilities for Boost.Build Jamfiles (not entirely true, see [Features](#features))\n* any kind of GUI for updating or managing configuration stored in Jamfiles\n\nAuthors\n------------------------------------------------------------------------------\n\n* [Mateusz Łoskot](http://mateusz.loskot.net) (mateusz@loskot.net)\n\nCredits\n------------------------------------------------------------------------------\n\n* Tobias Hunger, Koehne Kai, Christian Kandeler, Nikolai Kosjar, André Pönitz and others\n  for great help on the qt-creator mailing list and IRC,\n* [Tomasz Siekierda](https://github.com/sierdzio) for \n  [writing](http://lists.qt-project.org/pipermail/qt-creator/2013-October/002859.html) the\n  [Building Qt Creator from Git](http://qt-project.org/wiki/Building-Qt-Creator-from-Git)\n  and support through qt-creator list,\n* [Vladimir Prus](http://vladimirprus.com/) for answering questions about Boost.Build,\n* Authors of existing project manager plugins for Qt Creator - prime \n  learning resource,\n\nlots of thanks to!\n\nLicense\n------------------------------------------------------------------------------\n\n* [GNU Lesser General Public License, Version 2.1](http://www.gnu.org/licenses/lgpl-2.1.html)\n\n- - -\n\nFeatures\n------------------------------------------------------------------------------\n\nWhat the Boost.Build plugin can do?\n\n* Select a Jamfile at any level of a source tree configured with Boost.Build.\n* Select files at any level of a source tree and register them as project files.\n* Open Jamfile pretending it is a Qt Creator project file.\n* Parse selected Jamfile to retrieve project name, if defined. Otherwise, Jamfile parent\n  directory name is used as a project name. Finally, project name can be freely changed.\n* Generate list of include paths based on configured project files tree.\n* Utilise C++ browsing and editing capabilities and features of Qt Creator.\n    * Including the fantastic [searching with the Locator](http://qt-project.org/doc/qtcreator-2.8/creator-editor-locator.html)\n* Run Boost.Build command ```b2``` from within Qt Creator.\n* Configure Boost.Build command arguments.\n* Configure Boost.Build command working directory where ```b2``` is executed.\n* Configure Boost.Build command build directory with ```b2``` option ```--build-dir```.\n* Parse Boost.Build command and Boost.Build toolset output to generate Qt Creator's\n  Issues list and allow navigation to file and line of error or warning.\n    * Currently, GCC and Clang parsers are provided.\n* Configure build and clean steps.\n* Configure run targets for testing and debugging.\n* Save all Qt Creator project configuration changes in sidecar file ```.user```.\n* Modify and save registered project files in sidecar file ```.qtcreator.files```.\n* Modify and save includes paths in sidecar file ```.qtcreator.includes```..\n* ...\n\nWhat the Boost.Build plugin can not do?\n\n* Create new projects based on Boost.Build (simply, create *Jamfile* manually).\n* Parse Jamfiles to collect list of source files which are actually used.\n* Parse Jamfiles to collect configuration of targets, attributes, requirements, etc.\n* Capture any project changes made in Qt Creator UI and automatically update Jamfiles.\n* Change any Boost.Build configuration.\n* ...\n\nInstallation\n------------------------------------------------------------------------------\n\nYou need to build the plugin from sources.\n\nGenerally, follow the \n[Getting and Building Qt Creator](http://doc-snapshot.qt-project.org/qtcreator-extending/getting-and-building.html)\nsection from the\n[Creating Plugins](http://doc-snapshot.qt-project.org/qtcreator-extending/creating-plugins.html)\nguide.\n\nI use Qt and Qt Creator built from sources in their Git repositories, for example:\n\n* Qt 5 from branch: stable\n* Qt Creator from branch: 3.3\n\nSo, I recommend to follow these guides:\n\n1. [Building Qt 5 from Git](http://qt-project.org/wiki/Building_Qt_5_from_Git)\n1. [Building Qt Creator from Git](http://qt-project.org/wiki/Building-Qt-Creator-from-Git)\n\nOnce you have Qt Creator build ready, you need to set two environment variables:\n\n* ```QTC_SOURCE``` - Qt Creator sources location (e.g. path to Git clone)\n* ```QTC_BUILD``` - Qt Creator build or install prefix where the plugin will be deployed\n\nYou can either set the variables in CLI console, if you're going to run ```qmake```\ndirectly or in Qt Creator, in\n[Build Environment](http://doc-snapshot.qt-project.org/qtcreator-3.3/creator-build-settings.html)\nsettings of the ```boostbuildprojectmanager.pro``` project, after you open it in the IDE\nin order to build the plugin from Qt Creator.\n\nQuick Start\n------------------------------------------------------------------------------\n\n1. Go to **Open Project** and navigate to *Jamfile* of your project.\n1. **Open Boost.Build Project** wizard opens\n1. First page **Project Name and Paths** allows to inspect several paths and\n   customise **Project name**.\n1. Second page **Files Selection** allows to generate list of files to attach\n   to the project node in Qt Creator **Projects** tree and to use as input for C++ model\n   to enable C++ navigation features for the project.\n1. Third page **Project Management** allows to add the project as a subproject, enable\n   version control system and displays summary of auxiliary files generated by the wizard.\n1. **Finish** the wizard and let Qt Creator to generate the project tree and parse all\n   the source files attached generating C++ model of the code.\n1. Go to **Projects** mode to inspect and customise variety of settings:\n    * ```b2``` command working directory, that is where the command is executed\n    * build directory given to ```b2``` as value of ```--build-dir``` option\n    * build steps and arguments for ```b2``` command (e.g. change toolset, build variant)\n    * add custom build steps\n    * create run configuration with executable targets for testing and debugging\n1. Also, you can edit ```.qtcreator.files``` to add or remove source files and edit\n   ```.qtcreator.includes``` to specify include paths if C++ model is missing any.\n\nFor more details about individual features, steps and settings check the [FAQ](#faq).\n\nFAQ\n------------------------------------------------------------------------------\n\n### Why Boost.Build plugin for Qt Creator?\n\nI always wanted to learn Qt programming.\n\nWhen my son Hugo was born, I went on two weeks paternity leave and, somewhat inspired by the \n[Seven by Seven](http://pragprog.com/categories/7in7) idea, I decided to do an experiment:\n*can I learn a new programming skills or work on an open source project having only \na few 15-30 minutes short breaks over a day at my disposal?* \n\nQt Creator is a fantastic and powerful IDE which is surprisingly easy and pleasent to extend.\n\nYet, apparently, it is much quicker to hack fairly usable Boost.Build support for\nQt Creator than develop [Boost.CMake](https://svn.boost.org/trac/boost/wiki/CMake)\nand wait until it is approved by the Boost project.\n\n### Is it part of Qt Creator?\n\nNo.\n\n### Will it become part of Qt Creator?\n\nNo demand, no man power, no plans.\n\nUPDATE: There was an attempt to prepare contribution of this plug-in for to Qt Creator,\nbut it failed. See the [Issue #13](https://github.com/mloskot/qt-creator-plugin-boostbuild/issues/13) for details.\n\n### How does it compare to Generic Project plugin?\n\nThe Boost.Build plugin is inspired and largely based on the \n[Generic Project](http://doc-snapshot.qt-project.org/qtcreator-3.3/creator-project-generic.html) \nplugin (aka GenericProjectManager), both idea and implementation.\n\nThe Boost.Build plugin is a hybrid between \"Open Project\" and \"Import Project\" plugin.\n\nSimilarly to Generic Project support, the Boost.Build plugin:\n* allows to use Qt Creator as a code editor,\n* generates ```.files``` and ```.includes``` kinds of auxiliary files\n* allows to control some of aspects of the way project is built by modifying the build\n  command in the Projects mode under Build Settings\n* needs to be told which executable to run in in the Projects mode under Run Settings,\n  because Qt Creator cannot automatically determine it (see **TODO** items)\n\nUnlike Generic Project support, the Boost.Build plugin:\n* can only use Boost.Build system and its ```b2``` command,\n* relies on build configuration existing in project *Jamfile* files\n* relies on Boost.Build project hierarchy set up by *Jamroot* and *Jamfile* files.\n* allows to specify ```b2``` *working directory* which can be different\n from both, *build directory* and *project directory*, where project directory means\n directory with Jamfile selected to open as a project.\n* allows, thanks to previous features, to open only sub-project of a large project,\n  for example, while working with Boost, one may use the Boost.Build plugin to compose\n  a project which loads files only for selection of libraries, but request to run build\n  against the whole Boost C++ libraries collection.\n\nFinally, the Boost.Build plugin is a pilot project integrating Boost.Build system\nwith an IDE and this experience may be useful for future improvements and development\nof Boost.Build system itself.\n\n### What version of Qt Creator is supported?\n\nI use Qt Creator 3.3, but it should work with Qt Creator 3.0 or later.\nThere are git tags corresponding to Qt Creator versions.\n\nSee also the [Installation](#installation) section.\n\n### How to install the plugin?\n\n[Build](#installation) it.\n\n### Do I need to build Qt?\n\nI don't know. Ask Qt folks.\n\nI follow their\n[Getting and Building Qt Creator](http://doc-snapshot.qt-project.org/qtcreator-extending/getting-and-building.html):\n\n\u003e Qt Creator requires private headers of Qt, which are unfortunately\n\u003e not installed by the Qt binary packages\n\n### Do I need to build Qt Creator?\n\nApparently, yes, as per\n[Getting and Building Qt Creator](http://doc-snapshot.qt-project.org/qtcreator-extending/getting-and-building.html):\n\n\u003e It is also necessary if you want to create your own Qt Creator plugin.\n\n### Have you used it on Windows?\n\nNo.\n\n### Have you used it on Mac OS X?\n\nNo.\n\n### What is a *Jamfile*?\n\n*Jamfile* is a makefile of Boost.Build written in dedicated\n[Boost.Jam language](http://www.boost.org/boost-build2/doc/html/bbv2/overview/jam_language.html)\nand interpreted by Boost.Build engine which is executed and controlled by\nBoost.Build command ```b2```.\nSee [Boost.Build Overview](http://www.boost.org/boost-build2/doc/html/bbv2/overview.html)\nfor more details.\n\nBoost.Build convention is that the top of\n[project hierarchy](http://www.boost.org/boost-build2/doc/html/bbv2/tutorial/hierarchy.html)\nis called project root where lives a *Jamfile* called ```Jamroot```.\nA project may define subprojects and each subproject is defined by a *Jamfile*\ncalled ```Jamfile``` in a descendant directory of the project root.\n\nFor both, root and subproject *Jamfiles*, Boost.Build recognises variety of file names:\n* ```[Jj]amroot``` as well as ```[Jj]amroot.jam``` and ```project-root.jam```\n* ```[Jj]amfile``` as well as ```[Jj]amfile.jam```, ```[Jj]amfile.v2\" and  ```[Bb]uild.jam```.\n\nMost of those names are recognised by the Boost.Build Project Manager plugin.\n\n### What is ```*.qtcreator.files``` file for?\n\nQt Creator, the Boost.Build plugin, for a *Jamfile* which is opened as a project,\nautomatically generates ```.qtcreator.files``` file with list of all files selected\nin the **Files Selection** page of the project wizard.\n\nRole of this file is exactly the same as role of ```.files``` file for the\n[Generic Project](http://doc-snapshot.qt-project.org/qtcreator-3.3/creator-project-generic.html).\nIt just uses different extension to clearly indicate its role and avoid file name clashes.\n\nTo add or remove files, edit the ```.qtcreator.files``` file in Qt Creator.\n(**TODO:** Qt Creator recreates your project tree when you save the .files file.)\n\n### What is ```*.qtcreator.includes``` file for?\n\nQt Creator, the Boost.Build plugin, for a *Jamfile* which is opened as a project,\nautomatically generates ```.qtcreator.includes``` file.\n\nThis file is dedicated to specify any include paths which are **solely** used by\nQt Creator for analysing C/C++ code of the project.\n**Note**, these include paths do **not** affect compilation of source files whatsoever\nas *Jamfile* files remain the only source of build configuration.\n\nThe project wizard generates initial list of include paths adding every directory\nof project which contains C/C++ header files.\nFor large projects, like Boost, this may generate long list of includes paths,\nthough it should be easy to filter it.\n\nTo add or remove include paths, edit the ```.qtcreator.includes``` file in Qt Creator.\nThe paths can be either absolute or relative to the ```.qtcreator.includes``` file.\n\n### What is ```*.user``` file for?\n\nThis file is natively created by Qt Creator when\n[Opening Projects](http://doc-snapshot.qt-project.org/qtcreator-3.3/creator-project-opening.html):\n\n\u003e Qt Creator stores information that it needs to build projects in a .user file.\n\nThe Boost.Build Project Manager also uses this file to store information specific to\ncorresponding *Jamfile* project, like:\n* name of *Jamfile* project which can be customised by user in the **Open Project** wizard\n* path of working directory used to run Boost.Build command ```b2```\n* path of build directory passed as value of ```b2``` option ```--build-dir```\n\n### What is the Project Name in the Open Project wizard used for?\n\n\nThe **Open Boost.Build Project** wizard suggests project name on its first\npage titled **Project Name and Paths**.\n\nThe wizard tries to extract project name from the Boost.Build *project* rule,\nif present in the *Jamfile* being opened.\nOtherwise, the wizard uses name of parent directory of the *Jamfile*.\nFinally, user can change the **Project name** freely as it is only used by Qt Creator,\nnot by Boost.Build configuration.\n\nThe idea is to provide certain degree of freedom in arranging *Jamfile*-based projects\nin Qt Creator session, regardless of their arrangements on disk.\n\nThis feature, for example, allows to generate and open multiple projects into Qt Creator\nand all projects may refer to the same Boost library. For instance, working with\nBoost.Geometry library, one may load  *Jamfile* for tests and *Jamfile* for examples,\nselecting the same set of headers in both, and name the projects to reflect their purpose.\n\n### What is the roadmap?\n\nNone, apart form plan to roll the project forward fixing bugs and adding features\nas they appear useful or necessary in order to make work with Boost.Build-based\na bit more accessible and efficient.\n\nSee [Future](#future) section for some feature ideas.\n\n### How can I contribute?\n\n[Fork the repo](https://help.github.com/articles/fork-a-repo) and make the plugin better!\n\n\nFuture\n------------------------------------------------------------------------------\n\nAn unprioritised TODO list for the plugin:\n\n* Add tests! Add tests! Add tests! But first, learn how to test with Qt wealth!\n* Add file watchers for Jamfile and sidecar files to automatically reload any changes.\n    * Qt Creator recreates your project tree when you save the .files file.\n* Allow to specify ```b2``` command location not in ```PATH```.\n* Add ```DeployConfiguration``` and ```RunConfiguration``` targets, if really needed.\n* Determine toolset name from Kit and add ```toolset``` to additional arguments of step.\n    * See TODO item about ```user-config.jam``` lookup.\n* Improve use of [Qt Creator’s C++ model](http://ltcmelo.com/blog/2013/03/17/a-bit-about-qt-creators-c-model/)\n  for better code browsing experience\n    * Collect and resolve include paths as specified in all Jamfiles in project tree.\n    * Collect preprocessor defines from all project Jamfiles.\n* Look for ```user-config.jam``` to determine some useful settings, projects that may be\n  referenced, include paths.\n    * Default toolset and use it for Kit selection/validation? See separate TODO item.\n* Boost.Build Jamfile parser to enable fully-featured project management capacity by\n    * use b2 for\n      [reporting include paths for a project](http://lists.boost.org/boost-build/2013/11/27173.php),\n      targets, preprocessor defines and build configuration settings.\n    * extracting parser from\n      [tools/build/v2/engine](https://github.com/boostorg/build/tree/master/v2/engine)\n      as reusable library\n    * making some love with [Boost.Spirit](http://boost.org/libs/spirit)\n* Parse Jamfile(s) or use b2 features if possible, to utomatically determine what\n  executable(s) to run.\n\nSee also [opened enhancement issues](https://github.com/mloskot/qt-creator-plugin-boostbuild/issues?labels=enhancement\u0026state=open)\nat GitHub or search through the sources for ```TODO```, there is more items.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmloskot%2Fqt-creator-plugin-boostbuild","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmloskot%2Fqt-creator-plugin-boostbuild","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmloskot%2Fqt-creator-plugin-boostbuild/lists"}