| # C++ rules for Bazel | |
| * Postsubmit [](https://buildkite.com/bazel/rules-cc) | |
| This repository contains C, C++, and Objective-C language support for the [Bazel | |
| build system](https://bazel.build/). | |
| For this module's main reference, see the Bazel | |
| [documentation](https://bazel.build/reference/be/c-cpp). | |
| # Get Started | |
| ## Install Bazel | |
| Follow the official instructions to [Install | |
| Bazel](https://bazel.build/install). | |
| ## Add rules_cc to your MODULE.bazel | |
| Add the [latest release](https://registry.bazel.build/modules/rules_cc) to your [MODULE.bazel project file](https://bazel.build/external/overview). | |
| ## Declare a build target | |
| In a `BUILD.bazel` file, import and use the rules: | |
| ```python | |
| load("@rules_cc//cc:cc_binary.bzl", "cc_binary") | |
| cc_binary( | |
| name = "hello_world", | |
| srcs = ["hello_world.cc"], | |
| ) | |
| ``` | |
| ## Build and run your project | |
| Build and run your C/C++ binary with one command: | |
| ```console | |
| $ bazel run hello_world | |
| ``` | |
| To build the project without running the binary, use Bazel's `build` subcommand: | |
| ```console | |
| $ bazel build hello_world | |
| ``` | |
| # Toolchains | |
| ## Default autoconfigured toolchain | |
| rules_cc includes an auto-configured toolchain that uses the local compiler | |
| installed on the host machine. | |
| You can disable the autoconfigured C/C++ toolchain by adding the following Bazel | |
| flag to your project's [`.bazelrc` file](https://bazel.build/run/bazelrc): | |
| ``` | |
| --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 | |
| ``` | |
| ## Hermetic toolchains | |
| Configuring a [hermetic](https://bazel.build/basics/hermeticity) toolchain makes | |
| your build more deterministic. rules_cc itself does not yet offer a hermetic | |
| toolchain distribution. Other community owned and maintained projects offer | |
| hermetic C/C++ toolchains: | |
| - GCC (Linux only): <https://github.com/f0rmiga/gcc-toolchain> | |
| - Hermetic LLVM: <https://github.com/hermeticbuild/hermetic-llvm> | |
| - LLVM: <https://github.com/bazel-contrib/toolchains_llvm> | |
| - zig cc: <https://github.com/uber/hermetic_cc_toolchain> | |
| # Contributing | |
| Bazel and `rules_cc` are the work of many contributors. We appreciate your help! | |
| To contribute, please read the contribution guidelines: [CONTRIBUTING.md](https://github.com/bazelbuild/rules_cc/blob/main/CONTRIBUTING.md). | |
| Note that the `rules_cc` use the GitHub issue tracker for bug reports and feature requests only. | |
| For asking questions see: | |
| * [Stack Overflow](https://stackoverflow.com/questions/tagged/bazel) | |
| * [`rules_cc` mailing list](https://groups.google.com/forum/#!forum/cc-bazel-discuss) | |
| * Slack channel `#cc` on [slack.bazel.build](https://slack.bazel.build) |