More information about Bazel can be found [here](https://bazel.build/).
To get [Bazel](https://bazel.build/) working with {fmt} you can copy the files `BUILD.bazel`, `WORKSPACE.bazel`, `.bazelrc`, 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}).
## Using the fmt repository with Bazel
## Using {fmt} as a dependency
Even though the {fmt} repository does not contain a `WORKSPACE` file in its root directory,
there is an easy approach to use the {fmt} repository with Bazel out of the box.
This is demonstrated in the following example.
The following minimal example shows how to use {fmt} as a dependency within a Bazel project.
Create a `BUILD.bazel` file and add a dependency to {fmt}:
```python
cc_binary(# Build a binary
name="Demo",# Name of the binary
srcs=["main.cpp"],# List of files - we only have main.cpp
deps=["@fmt//:fmt"],# Depend on fmt
)
example
├── BUILD.bazel
├── main.cpp
└── WORKSPACE.bazel
```
Make use of {fmt} in `main.cpp`:
*main.cpp*:
```C++
```c++
#include "fmt/core.h"
intmain(){
fmt::print("The answer is {}.\n", 42);
fmt::print("The answer is {}\n",42);
}
```
The expected output of this example is `The answer is 42`.
## Bazelize fmt
First downloading a build file and then making use of it can be considered as a bit unclean, nevertheless, it works.
A cleaner Bazel solution would be to move the `WORKSPACE` and `BUILD` files to the root folder of the {fmt} Git repository.
In favor of keeping the {fmt} project directory clean, those files were not added to the project root directory.
If you do not like this, you can fork this repository and move the files `BUILD.bazel`, `WORKSPACE.bazel`, `.bazelrc`, and `.bazelversion` from this folder (`support/bazel`) to the root folder of this project.
This way {fmt} gets bazelized and can be used in your Bazel builds.
**Example**
Create a `WORKSPACE.bazel` file with the following content:
Create a `BUILD.bazel` file and add a dependency to {fmt} (same as above).
In the *WORKSPACE* file, the {fmt} GitHub repository is fetched. Using the attribute `patch_cmds` the files `BUILD.bazel`, `WORKSPACE.bazel`, `.bazelrc`, and `.bazelversion` are moved to the root of the {fmt} repository. This way the {fmt} repository is recognized as a bazelized workspace.
*BUILD.bazel*:
```python
cc_binary(
name="Demo",
srcs=["main.cpp"],
deps=["@fmt"],
)
```
The *BUILD* file defines a binary named `Demo` that has a dependency to {fmt}.
To execute the binary you can run `bazel run //:Demo`.