Search code examples
c++bazel

Change bazel output symlink location


I am using Bazel as my C++ build system and whenever I build my project my root directory is cluttered up with the bazel symlinks: bazel-bin, bazel-out, bazel-pipeline, and bazel-testlogs. Is it possible for me to have bazel place these in a directory such as ./out? I have tried using --output_base=./out and --output_user_root=./out however the symlinks are still placed in the root directory.

Here is what I want my project structure to be after a bazel [options] build:

ProjectRoot
├── bin
│   ├── App.cpp
│   └── BUILD.bazel
├── lib
│   ├── Lib1
│   │   ├── Lib1.cpp
│   │   ├── Lib1.hpp
│   │   └── BUILD.bazel
│   ├── Lib2
│   │   ├── Lib2.cpp
│   │   ├── Lib2.hpp
│   │   └── BUILD.bazel
│   └── BUILD.bazel
├── out
│   ├── bazel-bin
│   │   ├── stuff
│   │   └── ...
│   ├── bazel-out
│   │   ├── stuff
│   │   └── ...
│   ├── bazel-pipeline
│   │   ├── stuff
│   │   └── ...
│   └── bazel-testlogs
│       ├── stuff
│       └── ...
├── test
│   ├── test.cpp
│   └── BUILD.bazel
└── WORKSPACE.bazel

Here is what it currently is:

ProjectRoot
├── bazel-bin
│   ├── stuff
│   └── ...
├── bazel-out
│   ├── stuff
│   └── ...
├── bazel-pipeline
│   ├── stuff
│   └── ...
├── bazel-testlogs
│   ├── stuff
│   └── ...
├── bin
│   ├── App.cpp
│   └── BUILD.bazel
├── lib
│   ├── Lib1
│   │   ├── Lib1.cpp
│   │   ├── Lib1.hpp
│   │   ├── BUILD.bazel
│   ├── Lib2
│   │   ├── Lib2.cpp
│   │   ├── Lib2.hpp
│   │   ├── BUILD.bazel
│   └── BUILD.bazel
├── out
├── test
│   ├── test.cpp
│   └── BUILD.bazel
└── WORKSPACE.bazel

Solution

  • You're looking for --symlink_prefix. E.g., --symlink_prefix=/tmp/anywhere/you/want/bazel-.