We're hiring!
*

Meson & VSCode: Develop your project in a modern IDE

Xavier Claessens avatar

Xavier Claessens
April 18, 2023

Share this post:

Reading time:

Meson VSCode Extension

Want to develop your Meson project in a modern IDE? Make sure to install Meson VSCode extension which is now fully functional with the recent release of Meson 1.1.0!

VSCode, like its fully open-source sibling VSCodium, is a popular IDE (integrated development environment) from Microsoft that is highly configurable with extensions. Meson is the open source build system used by most GNOME and Freedesktop projects. Meson provides introspection data to integrate your project into your IDE, for tasks such as building and running your project. Meson also provides an official VSCode extension that uses that information to provide all functionalities presented here.

Examples below require a recent version of Meson and its VSCode extension:

  • Meson 1.1.0
  • Extension 1.9.0

Syntax highlighting

The extension provides complete Meson language grammar support for meson.build and meson_options.txt files.

Automatic project configuration

The first time a Meson project is opened, VSCode will ask if you wish to configure it. By default it will run meson setup builddir, default options are configuration in the extension settings.

Once your project is configured, or if it was already configured manually in builddir/, the extension will:

  • Add build and test tasks.
  • Setup C/C++ Intellisense.
  • Create an environment file to be used to launch commands in Meson's developer environment.

Build and test tasks

All tasks can be found in Terminal → Run Task..., or with Ctrl+Shift+P shortcut, search for meson in the dropdown menu.

The default build task will (re)compile the whole project. It can be triggered with Ctrl+Shift+B shortcut.

In addition, individual targets can be compiled by simply clicking them in the Meson sidebar. At the top you'll find the main project targets; subproject targets can be found below.

Each target also has an open icon to open the meson.build file where that target is defined and a submenu that lists all source files used to build that target. This allows browsing the project source tree by targets instead of relying on the filesystem hierarchy.

Likewise, the sidebar contains all unit tests that are sorted per subproject. Clicking one of them will run it.

To run all tests from all subprojects at once, search Meson: Run tests in the Terminal → Run Task... menu, or Ctrl+Shift+PMeson: Run Unit Testsall.

C/C++ Intellisense

If Microsoft's Intellisense extension is installed, it will be automatically configured to use the compile_commands.json file generated by Meson in your build directory. This allows VSCode's C and C++ syntax analyzer to find and include the paths and CFLAGS needed.

Launch task in developer environment

Meson provides a developer environment to run executables from your project without installing it. It consists on a set of environment variables that needs to be set in order to properly run the project, such as LD_LIBRARY_PATH, GST_PLUGIN_PATH (GStreamer), etc.

The Meson VSCode extension exports that environment into a file that can be used by VSCode's launch.json file's envFile attribute.

If your project provides a .vscode/launch.json file, F5 will run the program in the debugger, allowing you to inspect a variable's value and step line by line into your code directly in VSCode.

See GStreamer's launch.json file as example: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.vscode/launch.json.

Comments (3)

  1. q4a:
    Apr 18, 2023 at 06:02 PM

    What about breakpoints?
    https://github.com/microsoft/vscode-cpptools/issues/9503 - issue about breakpoints with strcmp didn't fixed since 24.06.2022
    https://github.com/microsoft/vscode-cpptools/issues/5676 - issue about string breakpoints condition like text=="from" didn't fixed since 23.06.2020
    https://github.com/microsoft/vscode-cpptools/issues/714 - issue about breakpoints with hit count didn't fixed since 11.05.2017.. 6 years have passed((

    Reply to this comment

    Reply to this comment

    1. Xavier Claessens:
      Apr 18, 2023 at 06:34 PM

      Hi,

      Debugging indeed has limitations, but those issues are not related to Meson integration. Unfortunately we are not affiliated with Microsoft so there is nothing we can do about them.

      Reply to this comment

      Reply to this comment

      1. q4a:
        Apr 18, 2023 at 06:51 PM

        Topic says "Develop your project in a modern IDE".
        Debugging is a significant part of the development, so it should not be ignored.
        I'm using QtCreator for cmake and meson projects - it's open source and has better debugging support.
        It's good when you have different options, but VS Code is less convenient for now.

        Reply to this comment

        Reply to this comment


Add a Comment






Allowed tags: <b><i><br>Add a new comment:


Search the newsroom

Latest Blog Posts

Mesa CI and the power of pre-merge testing

08/10/2024

Having multiple developers work on pre-merge testing distributes the process and ensures that every contribution is rigorously tested before…

A shifty tale about unit testing with Maxwell, NVK's backend compiler

15/08/2024

After rigorous debugging, a new unit testing framework was added to the backend compiler for NVK. This is a walkthrough of the steps taken…

A journey towards reliable testing in the Linux Kernel

01/08/2024

We're reflecting on the steps taken as we continually seek to improve Linux kernel integration. This will include more detail about the…

Building a Board Farm for Embedded World

27/06/2024

With each board running a mainline-first Linux software stack and tested in a CI loop with the LAVA test framework, the Farm showcased Collabora's…

Smart audio filters with WirePlumber 0.5

26/06/2024

WirePlumber 0.5 arrived recently with many new and essential features including the Smart Filter Policy, enabling audio filters to automatically…

The latest on cmtp-responder, a permissively-licensed MTP responder implementation

12/06/2024

Part 3 of the cmtp-responder series with a focus on USB gadgets explores several new elements including a unified build environment with…

Open Since 2005 logo

Our website only uses a strictly necessary session cookie provided by our CMS system. To find out more please follow this link.

Collabora Limited © 2005-2024. All rights reserved. Privacy Notice. Sitemap.