microsoft/bt-build
>- Fast incremental C++/MSBuild builds using bt. Use when the user wants to compile, build, check what's dirty, or query build dependencies in a repo that has .vcxproj files. Prefer bt over invoking MSBuild directly for inner-loop source changes (.cpp, .h, .idl, .xaml, .appxmanifest).
npx skills add https://github.com/microsoft/microsoft-ui-xaml --skill bt-build
bt reads an MSBuild binary log and replays only the dirty
compile/link/MIDL/XAML/makepri steps directly — no MSBuild overhead.
Use bt for the edit-build-debug cycle on source files only.
For anything else, use the build skill (MSBuild).
Headers not yet in the tlog (newly added #includes) bt won't trigger rebuilds
until the next msbuild -bl.
Any of these are true → use the build skill (MSBuild) instead:
.vcxproj or .vcxitems files were added, removed, or edited.props or .targets files were changedWhen in doubt, use MSBuild.
Run bt --version. If bt is missing, run the install-bt.ps1 script from
this skill's directory to download and install it. Periodically run it to
update bt as well.
bt needs a binlog from a prior MSBuild build. The repo's build scripts
all write to BuildOutput\ with names like:
| Binlog | Scope |
|----------------------------------------------|------------------------------------------------------------------|
| Microsoft.UI.Xaml.<flavor>.binlog | full product (incl. Controls DLL) — prefer for product code |
| MUXControls.<flavor>.binlog | test apps + infra — prefer for test code |
| Microsoft.ui.xaml.<flavor>.binlog | Microsoft.UI.Xaml.dll only — NOT Controls (mux subset) |
| Microsoft.UI.Xaml-Product.<flavor>.binlog | full product (alternate) — fallback for product code |
| Microsoft.UI.Xaml.Controls.<flavor>.binlog | Controls DLL only — narrow fallback |
| XamlCompilerPrerequisites.<flavor>.binlog | compiler tools — not used by bt |
<flavor> is amd64chk, arm64fre, etc. Single-project builds via
msb/build-clang produce <project>.<flavor>.binlog next to these.
To pick:
(dxaml/xcp/ only) / product (everything else under controls/dev,
controls/idl, dxaml/, src/).
preferring broader scopes (product covers Controls, etc.).
<flavor> from the chosen filename.--binlog BuildOutput\<chosen> to every bt invocation.bt has no useful default to fall back to.
Caveats:
Microsoft.UI.Xaml.<flavor>.binlog andMicrosoft.ui.xaml.<flavor>.binlog collide — content is whoever wrote
last; trust mtime + size, not casing.
set may be inconsistent.
build skill.Anything under these directories is test scope:
controls/test/MUXControls.Test/controls/test/MUXControlsTestApp/controls/test/TabViewTearOutApp/controls/test/TestAppCX/controls/test/IXMPTestApp/controls/test/MUXTestInfra/ *(if present)*Samples/AppTestAutomationHelpers/| Command | What it does |
|---------|--------------|
| bt build | Build everything dirty (always pass --binlog BuildOutput\<x>.binlog) |
| bt build MyFile.cpp | Forward walk: compile + relink anything affected by this source |
| bt build MyApp.dll | Backward walk: only what this target needs |
| bt build -c [target] | Compile only — skip link/lib |
| bt build -n | Dry run — print commands without executing |
| bt watch [--run <cmd>] | Build on file change; optionally run a command after |
| bt [--binlog some.binlog] dirty [target] | What needs building now? |
| bt bins MyHeader.h | What rebuilds when this header changes? |
| bt srcs [--headers] MyApp.dll | Sources (and optionally #included headers) feeding this target |
Run bt --help for command options (--binlog <path>),
bt <subcommand> --help for subcommand options like -j <N>,
--debounce <ms>, etc.
Take microsoft/bt-build from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.