# What Build System Does Abseil C++ Use? Bazel and CMake Configuration Guide

> Discover the build systems Abseil C++ uses. This guide covers configuring both Bazel and CMake for your project, offering flexibility for any development workflow.

- Repository: [Abseil/abseil-cpp](https://github.com/abseil/abseil-cpp)
- Tags: how-to-guide
- Published: 2026-07-19

---

**Abseil C++ officially supports both Bazel and CMake**, providing complete build configurations in the `abseil/abseil-cpp` repository to accommodate Google's internal workflows and traditional C++ development environments.

Abseil C++ is a production-quality collection of C++ library code maintained by Google. When integrating this library into your project, understanding what build system Abseil C++ uses is essential, as the repository maintains parallel build configurations that enable compilation via **Bazel** (Google's build tool) or **CMake** (the industry-standard meta-build system).

## Bazel: The Primary Build System

Bazel serves as the primary build system for Abseil C++, reflecting its origin as a Google project. The configuration relies on two core file types located at the repository root and within each subdirectory.

### MODULE.bazel Dependencies

The `MODULE.bazel` file declares the module metadata and external dependencies required to build the library. According to the Abseil C++ source code, this file registers dependencies such as `rules_cc`, `bazel_skylib`, and `platforms`, which provide essential build rules and platform constraints for the `cc_library` and `cc_test` targets defined throughout the project.

### BUILD.bazel Targets

Each subdirectory contains a `BUILD.bazel` file that defines granular **Bazel targets** using rules like `cc_library` and `cc_test`. This structure enables fine-grained incremental builds and remote caching. For example, components in `absl/base` and `absl/strings` are compiled as separate targets, allowing Bazel to rebuild only changed translation units.

## CMake: The Alternative Build System

CMake provides a traditional build environment for users who require integration with existing CMake-based projects or prefer standard tooling. The Abseil C++ CMake configuration produces an installable package that downstream projects can consume via `find_package`.

### Root CMakeLists.txt Configuration

The top-level [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt) aggregates individual component directories (such as `absl/base` and `absl/strings`) and configures compiler options. As implemented in `abseil/abseil-cpp`, this file explicitly sets the C++ standard to **C++17** using flags like `-std=c++17`, ensuring compatibility with Abseil's language requirements. The configuration also generates an `absl` export target that can be installed system-wide.

### CMake Integration Support

The [`CMake/README.md`](https://github.com/abseil/abseil-cpp/blob/main/CMake/README.md) file documents specific options for consumers, including how to control test compilation and install paths. The build system creates an installable target that exports CMake configuration files, allowing downstream projects to link against specific components like `absl::base` or `absl::strings` using modern CMake target syntax.

## Building Abseil C++ with Bazel

To compile the library using Bazel, run the following commands from the repository root. The `bazel` tool automatically discovers `BUILD.bazel` files and constructs the dependency graph.

```bash

# Build the entire library

bazel build //absl/...

# Run the full test suite

bazel test //absl/...

# Build with AddressSanitizer (optional)

bazel test //absl/... --config=asan

```

## Building Abseil C++ with CMake

CMake builds use an out-of-source directory pattern. The root [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt) detects the platform and configures the build accordingly.

```bash

# Configure the build directory

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release

# Compile the library

cmake --build build

# Install to system or local directory

cmake --install build

```

## Integrating Abseil into Your Project

### CMake Consumption

Once installed, Abseil C++ provides CMake package configuration files. Link against specific components using the `absl::` namespace to leverage modern CMake target propagation:

```cmake
find_package(absl CONFIG REQUIRED)

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE absl::base absl::strings absl::synchronization)

```

### Bazel Consumption

For Bazel-based projects, add Abseil as a dependency in your `MODULE.bazel` file or `WORKSPACE` configuration, then reference targets using the `@abseil-cpp` repository prefix (depending on your Bazel version and module setup).

## Summary

- Abseil C++ maintains **dual build system support** for Bazel and CMake, ensuring compatibility with both Google-internal workflows and standard open-source practices.
- **Bazel** configuration relies on `MODULE.bazel` for dependency management and `BUILD.bazel` files for `cc_library` targets.
- **CMake** configuration uses a root [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt) to aggregate components, enforce C++17, and create installable targets.
- Both systems compile identical source code from directories like `absl/base` and `absl/strings`, differing only in build metadata.
- Downstream CMake projects consume Abseil via `find_package(absl CONFIG REQUIRED)` and link against namespaced targets like `absl::base`.

## Frequently Asked Questions

### Does Abseil C++ require Bazel, or can I use CMake exclusively?

Abseil C++ fully supports **CMake as a first-class build system**. While Bazel is the primary system used internally at Google, the CMake configuration is officially maintained and supports standard workflows including installation, packaging, and `find_package` integration.

### What C++ standard does the Abseil C++ build system require?

Both the Bazel and CMake build configurations enforce **C++17** or higher. The [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt) explicitly sets compile options such as `-std=c++17`, and the Bazel `cc_library` rules assume C++17-compatible toolchains.

### Where are the main build configuration files located in the repository?

The key files are located at the repository root: `MODULE.bazel` and `BUILD.bazel` for Bazel builds, and [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt) for CMake builds. Detailed CMake instructions are additionally documented in [`CMake/README.md`](https://github.com/abseil/abseil-cpp/blob/main/CMake/README.md).

### Can I build only specific components of Abseil C++?

Yes. In **Bazel**, you can build specific targets such as `//absl/strings` or `//absl/base` rather than `//absl/...`. In **CMake**, you can disable unwanted components using cache variables defined in the top-level [`CMakeLists.txt`](https://github.com/abseil/abseil-cpp/blob/main/CMakeLists.txt), though the default configuration builds all standard libraries.