# CodeQL-Codeüberprüfung für kompilierte Sprachen

Verstehen Sie, wie CodeQL kompilierte Sprachen analysiert werden, welche Build-Optionen verfügbar sind, und erfahren Sie, wie Sie bei Bedarf den Datenbankgenerierungsprozess anpassen können.

## Vergleich der Buildmodi

<div class="ghd-tool rowheaders">

| Eigenschaft des Build-Modus                                                              | Nichts                            | Autobuild                            | Manuell                |
| ---------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------ | ---------------------- |
| Wird standardmäßig eingerichtet und für die Aktivierung auf Organisationsebene verwendet | Ja (C/C++, C#, Java und Rust)     | Ja, wo `none` nicht unterstützt wird | No                     |
| Die Analyse ist ohne Benutzerkonfiguration erfolgreich.                                  | Ja                                | Variable                             | No                     |
| Vollständigkeit der Analyse                                                              | Generierter Code nicht analysiert | Variable                             | Vom Benutzer gesteuert |
| Genauigkeit der Analyse                                                                  | Gut                               | Gut                                  | Sehr hoch              |

</div>

## Auswählen eines Buildmodus

Wenn Sie code scanning zum ersten Mal oder in mehreren Repositories einrichten, sollten Sie die Standardeinrichtung verwenden. Das Standardsetup verwendet die einfachste Methode, die verfügbar ist, um eine CodeQL Datenbank zu generieren und Ihren Code zu analysieren, damit Sie Benachrichtigungen so schnell wie möglich beheben können. Nachdem Sie die anfänglichen Warnungen behoben haben, können Sie mit einem manuellen Erstellungsprozess für Repositorys mit hohem Risiko zu erweitertem Setup wechseln.

Informationen zu sprachspezifischem `autobuild` Verhalten, Läuferanforderungen und Buildmodusdetails für kompilierte Sprachen finden Sie unter [CodeQL-Buildoptionen und -schritte für kompilierte Sprachen](/de/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages).

## Verwenden mehrerer Buildmodi in einem mehrsprachigen Repository

Für Repositorys mit mehreren kompilierten Sprachen können Sie unterschiedliche Build-Modi für unterschiedliche Sprachen verwenden. Wenn Ihr Repository beispielsweise C/C++, C# und Java enthält, sollten Sie manuelle Buildschritte für eine Sprache (hier C/C++) bereitstellen. Dieser Workflow legt für jede Sprache einen anderen Build-Modus fest.

```yaml
strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1
```

Informationen zu den Sprachen, Bibliotheken und Frameworks, die in der neuesten Version von CodeQLunterstützt werden, finden Sie in der [](https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks) Dokumentation unter CodeQL". Informationen zu den Systemanforderungen für die Ausführung der neuesten Version finden CodeQLSie in der [](https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements) Dokumentation unter CodeQL.

## Aktivieren der Zwischenspeicherung von Abhängigkeiten für CodeQL

Für standardmäßige Einrichtungs-Workflows ist das Zwischenspeichern von Abhängigkeiten nur für GitHub-gehostete Runner in öffentlichen und privaten Repositories aktiviert.

Für erweiterte Setupworkflows ist das Zwischenspeichern von Abhängigkeiten standardmäßig deaktiviert. Verwenden Sie zum Aktivieren der Abhängigkeitszwischenspeicherung die Einstellung `dependency-caching` für die Aktion CodeQL im erweiterten Setup-Workflow. Diese Einstellung akzeptiert die folgenden Werte:

* `false`
  /
  `none`
  /
  `off`: Zwischenspeichern von Abhängigkeiten deaktiviert (Standardeinstellung)
* `restore`: Nur vorhandene Caches wiederherstellen, keine neuen Caches speichern
* `store`: Nur neue Caches speichern, keine vorhandenen Caches wiederherstellen
* `true`
  /
  `full`
  /
  `on`: Vorhandene Caches wiederherstellen und neue Caches speichern

Die folgenden Einstellungen würden z. B. das Zwischenspeichern von Abhängigkeiten für die CodeQL Aktion aktivieren:

```yaml
    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true
```

## Verwenden Sie den `none`-Buildmodus für CodeQL

Für C/C++, C#, Java und Rust erstellt CodeQL eine Datenbank, ohne dass ein Build erforderlich wird, wenn Sie das Standardsetup für code scanning aktivieren, es sei denn, das Repository enthält auch Kotlin-Code. Wenn ein Repository zusätzlich zu Java Code Kotlin-Code enthält, wird das Standardsetup mit dem AutoBuild-Prozess aktiviert, da die Kotlin-Analyse einen Build erfordert.

Das Erstellen einer CodeQL-Datenbank ohne Build kann zu weniger genauen Ergebnissen führen als die Verwendung von `autobuild` oder manuellen Erstellungsschritten, wenn:

* Die Build-Skripte können nicht nach Abhängigkeitsinformationen abgefragt werden, und Abhängigkeitsberechnungen sind ungenau.
* Das Repository generiert normalerweise Code während des Buildprozesses.

Zum Verwenden von `autobuild` oder dem manuellen Erstellen von Schritten können Sie das erweiterte Setup verwenden.

> \[!NOTE] Wenn `build-mode` für die Java-Analyse auf `none` festgelegt ist und Kotlin-Code im Repository vorhanden ist, wird der Kotlin-Code nicht analysiert, und es wird eine Warnung ausgegeben. Siehe [CodeQL-Buildoptionen und -schritte für kompilierte Sprachen](/de/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages#building-java-and-kotlin).

## Verwendung `autobuild` für CodeQL

Die CodeQL Aktion verwendet `autobuild`, um kompilierte Sprachen in den folgenden Fällen zu analysieren.

* Das Standardsetup ist aktiviert, und die Sprache unterstützt `none` keinen Build (unterstützt für C/C++, C#, Java und Rust).
* Die erweiterte Einrichtung ist aktiviert, und der Workflow gibt `build-mode: autobuild` an.
* Das erweiterte Setup ist aktiviert, und der Workflow verfügt über einen Autobuild-Schritt für die Sprache mithilfe der `autobuild` Aktion (`github/codeql-action/autobuild@v4`).

### Verwenden Sie die Option `build-mode`.

```yaml
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}
```

### Verwenden des AutoBuild-Schritts

```yaml
    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4
```

## Manuelles Angeben von Buildschritten

Sie können nur manuelle Buildschritte angeben, wenn Sie das erweiterte Setup aktiviert haben (siehe [Konfigurieren des erweiterten Setups für das Code-Scanning](/de/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning#configuring-advanced-setup-for-a-repository)).

Wenn `autobuild` fehlschlägt oder du eine andere Gruppe von Quelldateien analysieren möchtest, die vom `autobuild`-Prozess erstellt wurden, musst du die folgenden Schritte ausführen:

* Wenn Ihr Workflow einen Buildmodus für die Sprache angibt, ändern Sie den Buildmodus in `manual`.
* Wenn Ihr Workflow einen `autobuild`-Schritt vorsieht, entfernen Sie den `autobuild`-Schritt im Workflow oder kommentieren Sie ihn aus.

Hebe dann die Auskommentierung des Schritts `run` auf, und gib den zu verwendenden Buildprozess manuell an. Für C/C++, C#, Go, Java, Kotlin und Swift analysiert CodeQL, welcher Quellcode von Ihren angegebenen Buildschritten erstellt wird.

Aktualisiere deine Workflow, um `build-mode` als `manual` festzulegen.

```yaml
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"
```

Alternativ dazu können Sie Ihren Workflow aktualisieren und den Schritt „Autobuild“ auskommentieren.

```yaml
    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4
```

### Hinzufügen von Buildbefehlen

Wenn die manuelle Erstellung aktiviert ist, deaktivieren Sie den `run`-Schritt im Workflow und fügen Sie Build-Befehle hinzu, die für Ihr Repository geeignet sind. Der `run`-Schritt führt Befehlszeilenprogramme mithilfe der Shell des Betriebssystems aus. Sie können diese Befehle ändern und weitere Befehle hinzufügen, um den Buildprozess anzupassen.

```yaml
- run: |
    make bootstrap
    make release
```

Weitere Informationen zum Schlüsselwort `run` findest du unter [Workflowsyntax für GitHub Actions](/de/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun).

<!-- For "no-build" this is covered earlier in the article under "About CodeQL build modes". -->

Wenn Sie manuelle Buildschritte für kompilierte Sprachen hinzugefügt haben und code scanning in Ihrem Repository weiterhin nicht funktioniert, wenden Sie sich an uns über das [GitHub-Support-Portal](https://support.github.com).