Skip to content

C/C++

Bazelle includes C/C++ support via the gazelle_cc extension from EngFlow.

Generated Rules

According to gazelle_cc documentation:

Source PatternGenerated Rule
*.c, *.cc, *.cpp + headerscc_library
Files with main() functioncc_binary
Test filescc_test

Configuration

C/C++ support is provided by the upstream gazelle_cc extension. Refer to the gazelle_cc repository for:

  • Available directives
  • Configuration options
  • Header dependency resolution
  • Build customization

Dependencies

Setup

Configure gazelle_cc in your MODULE.bazel:

MODULE.bazel
bazel_dep(name = "rules_cc", version = "0.2.16")
bazel_dep(name = "gazelle_cc", version = "0.5.0")

Common External Dependencies

MODULE.bazel
# Google Test for testing
bazel_dep(name = "googletest", version = "1.14.0")
# Abseil for utilities
bazel_dep(name = "abseil-cpp", version = "20240116.0")
# Protocol Buffers
bazel_dep(name = "protobuf", version = "33.4")

Example

A typical C++ project structure:

src/
├── greeter/
│ ├── greeter.h
│ ├── greeter.cc
│ └── greeter_test.cc
└── main.cc

Limitations

Since C/C++ support comes from an external extension:

  • Behavior may differ between gazelle_cc versions
  • Directives and features depend on upstream
  • Complex configurations may need manual adjustment
  • Consult gazelle_cc issues for known limitations

Further Reading