1# Bazel support 2 3To get [Bazel](https://bazel.build/) working with {fmt} you can copy the files `BUILD.bazel`, `WORKSPACE.bazel`, and `.bazelversion` from this folder (`support/bazel`) to the root folder of this project. This way {fmt} gets bazelized and can be used with Bazel (e.g. doing a `bazel build //...` on {fmt}). 4 5## Using {fmt} as a dependency 6 7The following minimal example shows how to use {fmt} as a dependency within a Bazel project. 8 9The following file structure is assumed: 10 11``` 12example 13├── BUILD.bazel 14├── main.cpp 15└── WORKSPACE.bazel 16``` 17 18*main.cpp*: 19 20```c++ 21#include "fmt/core.h" 22 23int main() { 24 fmt::print("The answer is {}\n", 42); 25} 26``` 27 28The expected output of this example is `The answer is 42`. 29 30*WORKSPACE.bazel*: 31 32```python 33load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") 34 35git_repository( 36 name = "fmt", 37 branch = "master", 38 remote = "https://github.com/fmtlib/fmt", 39 patch_cmds = [ 40 "mv support/bazel/.bazelversion .bazelversion", 41 "mv support/bazel/BUILD.bazel BUILD.bazel", 42 "mv support/bazel/WORKSPACE.bazel WORKSPACE.bazel", 43 ], 44 # Windows-related patch commands are only needed in the case MSYS2 is not installed. 45 # More details about the installation process of MSYS2 on Windows systems can be found here: 46 # https://docs.bazel.build/versions/main/install-windows.html#installing-compilers-and-language-runtimes 47 # Even if MSYS2 is installed the Windows related patch commands can still be used. 48 patch_cmds_win = [ 49 "Move-Item -Path support/bazel/.bazelversion -Destination .bazelversion", 50 "Move-Item -Path support/bazel/BUILD.bazel -Destination BUILD.bazel", 51 "Move-Item -Path support/bazel/WORKSPACE.bazel -Destination WORKSPACE.bazel", 52 ], 53) 54``` 55 56In the *WORKSPACE* file, the {fmt} GitHub repository is fetched. Using the attribute `patch_cmds` the files `BUILD.bazel`, `WORKSPACE.bazel`, and `.bazelversion` are moved to the root of the {fmt} repository. This way the {fmt} repository is recognized as a bazelized workspace. 57 58*BUILD.bazel*: 59 60```python 61cc_binary( 62 name = "Demo", 63 srcs = ["main.cpp"], 64 deps = ["@fmt"], 65) 66``` 67 68The *BUILD* file defines a binary named `Demo` that has a dependency to {fmt}. 69 70To execute the binary you can run `bazel run //:Demo`. 71 72# Using Bzlmod 73 74The [Bazel Central Registry](https://github.com/bazelbuild/bazel-central-registry/tree/main/modules/fmt) also provides support for {fmt}. 75