CMake SBOM-generatie: native, handmatige en build-bewuste aanpakken
| Interlynk

Hoe genereer je in 2026 een SBOM uit een CMake-build - CMakes nieuwe native SBOM-ondersteuning, open-source-modules, binaire analyse en build-bewuste generatie vergeleken, met wat elke aanpak vastlegt en mist.
Vier manieren om een SBOM uit een CMake-build te halen
Er zijn vier manieren om een Software Bill of Materials (SBOM) uit een CMake-project te halen, en elke leest een ander deel van je build. CMake biedt nu native, experimentele SBOM-generatie rechtstreeks uit zijn build-graph. Je kunt daarnaast open-source-modules toevoegen, binaire analyse op het uiteindelijke image uitvoeren, of build-bewuste generatie gebruiken die na de build de werkelijke compiler- en linker-aanroepen leest die je build voortbrengt.
Deze gids beschrijft wat elke aanpak ziet en waar hij ophoudt. Bij embedded systemen en firmware zitten kritieke componenten vaak in de dode hoek van de gebruikelijke build-graph-tools.
Het korte antwoord
CMake kan een SBOM native uit zijn build-graph genereren, wat de snelste start is voor projecten die volledig in CMake worden gebouwd. De build-graph mist echter meegeleverde broncode (vendored source), voorgecompileerde statische bibliotheken en vendor-SDK's. Open-source-modules delen die grenzen. Binaire analyse inspecteert het eindresultaat, maar leunt op afgeleide identiteiten. Build-bewuste generatie leest na de build de compiler- en linker-aanroepen van de echte build, zonder opnieuw te bouwen, en bewaart bewijs per component. Kies de aanpak die elke laag van je uitgeleverde binary dekt.
Wat CMakes native SBOM doet
CMake bevat experimentele SBOM-generatie die documenten rechtstreeks opbouwt uit zijn afhankelijkheidsgraaf voor compileren en linken. Wanneer je die tijdens de configuratie inschakelt, geeft ze SPDX-documenten uit voor de door CMake opgeloste targets. Omdat ze interne target-structuren leest in plaats van ruwe bestanden te scannen, draait ze snel en plaatst ze first-party targets netjes naast de door CMake opgeloste afhankelijkheden.
Native SBOM-ondersteuning in CMake is experimenteel en volop in ontwikkeling. Raadpleeg de officiële CMake-documentatie om de actuele flag-namen en versiecompatibiliteit te bevestigen voordat je het in productie gebruikt.
Voor een nadere blik op de functie zelf, zie CMakes native SBOM-functie.
De vier aanpakken vergeleken
Hier zie je wat elke methode inspecteert, waar ze sterk is en waar ze tekortschiet.
Aanpak | Wat het leest | Legt goed vast | Mist | Het best wanneer |
|---|---|---|---|---|
Native CMake SBOM (experimenteel) | CMake-build-graph | First-party targets en door CMake opgeloste afhankelijkheden. Snel, zonder externe tools | Meegeleverde bronbestanden zonder target, voorgecompileerde statische bibliotheken, vendor-SDK's | Je project wordt volledig via CMake-targets gebouwd en heeft een snelle, standaardconforme start nodig |
Open-source-CMake-modules (bijv. community- | CMake-projectbestanden via toegevoegde scripts | Aanpasbare uitvoerformaten, afgestemd op bestaande CMake-workflows | Dezelfde build-graph-grenzen; vereist handmatig onderhoud | Je wilt volledige scriptcontrole en de integratie zelf beheren |
Binaire / firmware-analyse | Gecompileerde binaries en firmware-images | Componenten die fysiek in de uitgeleverde binary aanwezig zijn | Exacte componentversies en bron-herkomst; de identiteit wordt afgeleid en is onbetrouwbaar bij gestripte builds | Je hebt alleen toegang tot gecompileerde binaries, of moet uiteindelijke images verifiëren |
Build-bewuste generatie ( | De compiler- en linker-aanroepen die je build voortbrengt, plus het artefact (na de build, zonder opnieuw te bouwen) | Meegeleverde broncode, statische archieven en vendor-SDK's met bewijs op broncodeniveau | Vereist commerciële tooling (gratis niveau beschikbaar) | Je levert gereguleerde of embedded firmware en hebt auditklaar bewijs nodig |
Deze methoden vullen elkaar aan. Engineeringteams beginnen vaak met de native CMake-uitvoer en voegen build-bewuste generatie toe zodra SDK's van derden en statische bibliotheken in beeld komen.
Waar elke aanpak ophoudt
Embedded builds bestaan uit meerdere lagen, en diepere lagen liggen vaak buiten de build-graph van CMake:
Pakketbeheer-manifesten (Conan, vcpkg): Zichtbaar voor alle vier de aanpakken.
CMake-build-targets: Native CMake en open-source-CMake-modules reiken tot hier.
Meegeleverde broncode (vendored source): Build-bewuste generatie legt deze laag vast; graafgebaseerde methoden missen haar.
Voorgecompileerde statische archieven (
.a/.lib): Build-bewuste tools leggen deze rechtstreeks vast; binaire analyse leidt hun identiteit af.Silicon-vendor-SDK's (ST, NXP, TI, Renesas): Build-bewuste tools volgen aangepaste SDK-bronnen; andere methoden missen ze.
Uiteindelijk firmware-image: Binaire analyse leest de gecompileerde bytes; build-bewuste tools herleiden die bytes naar de broncode.
Hoe dieper een laag zit, hoe minder zichtbaar ze is voor de CMake-graph. Lees onze uiteenzetting over waarom SBOM's voor C/C++ lastig zijn om deze zichtbaarheidshiaten in detail te begrijpen.
Een uitgewerkt voorbeeld
We hebben een echte Trusted-Firmware-M-build op een STM32H5-MCU via CMake tot een SBOM verwerkt en vastgelegd wat elke laag naar boven bracht. Lees de stapsgewijze uitleg in Trusted Firmware-M op een STM32H5.
Wanneer welke aanpak
Zuivere CMake-toepassingen: Gebruik native CMake-SBOM-generatie. Ze dekt wat je compileert en vereist minimale installatie.
Firmware met vendor-SDK's of statische bibliotheken: Gebruik build-bewuste generatie. Het volgen van kwetsbaarheden vereist zicht op componenten onder de CMake-target-graaf.
Uitgeleverde binaries zonder build-toegang: Gebruik binaire analyse om componenten in het gecompileerde image te vinden, en behandel versienummers als afgeleid totdat je een build-bewuste doorloop uitvoert.
Hoe Interlynk hierin past
Interlynks generator lynkctl werkt build-bewust. Hij draait na je bestaande Make-, CMake-, IAR- of TI-Code-Composer-build, zonder opnieuw te bouwen, en leest de werkelijke compiler- en linker-aanroepen. Zo legt hij de meegeleverde code, statische archieven en silicon-SDK's vast die louter graafgebaseerde tools missen. Hij legt bewijs op componentniveau vast, tot aan het bronbestand, de compile-regel en een betrouwbaarheidsniveau, zodat beveiligingsbeoordelaars kunnen nagaan waarom elke vermelding in het manifest staat. Hij draait in air-gapped omgevingen en levert de formaten CycloneDX 1.6+ en SPDX 3.0+. Bekijk de C/C++ SBOM-generator voor embedded software. Voor teams die naar gereguleerde markten leveren, sluit lynkctl rechtstreeks aan op FDA 524B en de EU Cyber Resilience Act.
Veelgestelde vragen
Kan CMake zelf een SBOM genereren?
Ja. Via recent toegevoegde experimentele functies geeft CMake SPDX-SBOM's rechtstreeks uit zijn build-graph uit tijdens configuratie en installatie. Het dekt interne targets en door CMake opgeloste afhankelijkheden, dus controleer of het je meegeleverde code en statische bibliotheken vastlegt voordat je het voor compliance gebruikt.
Wat mist CMakes native SBOM?
Het mist componenten buiten de target-build-graaf, waaronder broncode die rechtstreeks in de boom is gekopieerd, voorgecompileerde statische bibliotheken en silicon-vendor-SDK's. Omdat embedded firmware sterk op deze onderdelen leunt, combineren teams CMake regelmatig met build-bewuste tools.
CycloneDX of SPDX voor een CMake-project?
Beide formaten werken in deze workflows. CMake genereert SPDX native, terwijl lynkctl zowel CycloneDX 1.6+ als SPDX 3.0+ uitvoert. Kies het formaat dat je nagelegen scanners of toezichthouders vereisen.
Hoe genereer ik een SBOM voor firmware die met IAR- of TI-toolchains is gebouwd?
Een build-bewuste generator leest de compiler- en linker-aanroepen van IAR-Embedded-Workbench- en TI-Code-Composer-builds nadat ze zijn uitgevoerd, zonder CMake te vereisen. Lees meer over de C/C++ SBOM-generator voor embedded software.
Zijn er gratis opties?
De native CMake-SBOM-functie en community-CMake-modules zijn gratis te gebruiken. Interlynk biedt bovendien een gratis niveau. Begin met de gratis aanpak die bij je build-omgeving past en voeg build-bewuste generatie toe wanneer je SDK's van derden en statische bibliotheken moet auditen.
Verder lezen
Voor een overzicht van het bredere ecosysteem, lees onze gids over de beste SBOM-tools.