Zig is awesome for low-level systems programming, but when working on multiple projects in a shared workspace, VS Code can get repetitive fast.
I wanted a clean way to:
- π§ Build and debug multiple Zig projects
- π Without duplicating configurations
tasks.json
andlaunch.json
- π― And have a smooth, native experience in VS Code
Turns out, you can do it entirely using inputs
in VS Code's task system β no .env
files, no shell scripts, no hacks.
π§ What this setup gives you
- A single
tasks.json
- A single
launch.json
- You choose your Zig project from a dropdown
- It builds and debugs the right one choosing by a dropdown
- Everything works with
zig build
,zig-out/bin/...
, and LLDB breakpoints
π¦ Project structure
multi-zig-project/
βββ project1/
β βββ src/
β βββ build.zig
βββ project2/
β βββ src/
β βββ build.zig
βββ .vscode/
βββ tasks.json
βββ launch.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Zig Project (LLDB)",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/${input:targetProject}/zig-out/bin/${input:targetProject}",
"args": [],
"cwd": "${workspaceFolder}",
"terminal": "integrated",
"preLaunchTask": "build-zig-dynamic",
"env": {}
}
],
"inputs": [
{
"id": "targetProject",
"type": "pickString",
"description": "DEBUG: Choose project to debug...",
"options": ["project1", "project2"],
"default": "project1"
}
]
}
Tasks.json
{
"version": "2.0.0",
"inputs": [
{
"id": "targetProject",
"type": "pickString",
"description": "BUILD TASK: Choose project a project to build...",
"options": ["project1", "project2"],
"default": "project1"
}
],
"tasks": [
{
"label": "build-zig-dynamic",
"type": "shell",
"command": "zig build -Doptimize=Debug",
"options": {
"cwd": "${workspaceFolder}/${input:targetProject}"
},
"problemMatcher": []
}
]
}
π How to use it
- Open the workspace in VS Code
- Place a breakpoint on project1 or project2
main.zig
files. - Press
F5
to Debug - you'll be prompted to pick a project to Debug
- you'll be prompted to pick a project to pre build
There are 2 projects, but you can add more simply adding projects and add a reference in input
sections of tasks.json and launch.json
π Requirements
- Working on Zig (0.14)
- VS Code
- CodeLLDB extension (for debugging)
- LLDB
Github repo link
Complete repo available at:
https://github.com/pierangelomiceli/multi-zig-project
π¬ Why share this?
Because I thought someone else might be tired of juggling 5 copies of the same config too.
This setup is clean, scalable, and 100% portable. Hope it helps someone!
Feel free to fork, tweak, or give feedback π
Oldest comments (0)