Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
BEAR(1) 		     General Commands Manual			 BEAR(1)

NAME
     Bear - a tool to generate compilation database for Clang tooling.

SYNOPSIS
     bear [OPTIONS] [-] [BUILD_COMMAND...]

     bear intercept [OPTIONS] [-] BUILD_COMMAND...

     bear semantic [OPTIONS]

DESCRIPTION
     Bear is a tool that generates a JSON compilation database for Clang tooling
     by intercepting command executions during the build process.  The JSON com-
     pilation database is used in the Clang project to provide information about
     how  individual  compilation  units  were	processed,  enabling  tools like
     clang-tidy, clangd, and other Clang-based analysis tools to understand your
     project's build configuration.

     Bear operates by intercepting system calls during the build process to cap-
     ture compilation commands.  It supports two main interception methods:  dy-
     namic  library  preloading  (on  Unix-like systems) and wrapper executables
     (cross-platform).	The captured commands are then filtered through semantic
     analysis to identify actual compiler invocations  and  generate  the  final
     compilation database.

     Bear can operate in three modes:

     * Combined  mode (default): Runs both interception and semantic analysis in
       sequence

     * Intercept mode: Only captures build events to an intermediate file

     * Semantic mode: Processes previously captured events to generate the  com-
       pilation database

   OPTIONS
     -c, -config FILE
	    Specify  a configuration file path.  The configuration file controls
	    output formatting, compiler recognition, source filtering,	and  du-
	    plicate handling.

     -o, -output FILE
	    Specify  the output file path (default: compile_commands.json).  The
	    output is a JSON compilation database.

     -a, -append
	    Append results to an existing output file instead of overwriting it.
	    This allows incremental updates to the compilation database.

     -h, -help
	    Print help information.

     -V, -version
	    Print version information.

COMMANDS
     Calling bear without commands will execute the combined mode, and will  in-
     tercept the compiler calls and generate a compilation database as output.

   bear intercept
     Intercepts command execution events during the build process and saves them
     to an events file for later processing.

     bear intercept [OPTIONS] [-] BUILD_COMMAND...

   bear semantic
     Processes	previously  captured  events  to generate a compilation database
     through semantic analysis.

     bear semantic [OPTIONS]

OUTPUT
     Bear generates a JSON compilation database conforming  to	the  Clang  JSON
     Compilation Database specification.  The output is a JSON array of compila-
     tion entry objects.

   Entry Format
     Each compilation database entry contains the following fields:

     directory
	    The working directory of the compilation (absolute path)

     file   The main translation unit source file (absolute path)

     arguments
	    The compilation command as an array of strings (preferred format)

     command
	    The  compilation  command as a single shell-escaped string (alterna-
	    tive to arguments)

     output
	    The output file produced by compilation (optional, absolute path)

   Output Formatting
     The output format can be controlled through the configuration file:

     * Path resolution: Paths can be formatted as absolute, relative, canonical,
       or as-is

     * Entry format: Choose  between  arguments  array	(preferred)  or  command
       string

     * Field inclusion: Control whether the output field is included

     * Source filtering: Include/exclude files based on directory rules

     * Duplicate filtering: Remove duplicate entries based on configurable field
       matching

     Bear  generates  entries  where all paths are absolute by default, and uses
     the arguments field instead of command to avoid shell escaping issues.

CONFIG FILE
     Bear uses a YAML configuration file to control its behavior.  The	configu-
     ration file follows a structured schema with several main sections.

   Configuration Schema
	    schema: "4.1"
	    intercept:
	      mode: wrapper
	    compilers:
	      - path: /usr/bin/cc
		as: gcc
	      - path: /usr/local/bin/gcc
		ignore: true
	    sources:
	      directories:
		- path: /project/tests
		  action: exclude
	    duplicates:
	      match_on:
		- file
		- arguments
	    format:
	      paths:
		directory: canonical
		file: canonical
	      entries:
		use_array_format: true
		include_output_field: true

     This  example  configuration  file:  sets the interception mode to wrapper,
     hints the /usr/bin/cc to be the main compiler in this project, which is the
     GNU compiler, hints to ignore the	/usr/local/bin/gcc  compilers  from  the
     project, instructs to ignore files from /project/tests, instructs to detect
     duplicates  based	on the file and arguments fields of the output file, in-
     structs to format the output to use canonical path for the file and  direc-
     tory  fields  of  the  output file, instructs to use the arguments over the
     command field in the output file, instructs to include the output field  in
     the output file.

   Configuration Sections
     The configuration file uses schema version 4.1 and has the following struc-
     ture:

   intercept
     Controls the command interception method:

     * mode: preload (Unix) or wrapper (cross-platform)

   compilers
     Contains  hints  about  what  compiler needs to be recognized and what that
     compiler is.

     * path: Path to the compiler executable

     * as: Compiler type hint for semantic analysis.   Valid  values  are:  gcc,
       clang,  flang,  intel-fortran,  cray-fortran,  cuda,  msvc, clang-cl, in-
       tel_cc, nvidia-hpc, armclang, ibm_xl.

     * ignore: Whether to ignore this compiler.

     The generic compiler names cc and c++ default to GCC semantics.   On  plat-
     forms  where  these  map to a different compiler (macOS, FreeBSD, OpenBSD),
     use the as field to override:

	    compilers:
	      - path: /usr/bin/cc
		as: clang
	      - path: /usr/bin/c++
		as: clang

   sources
     Filtering functionality based on the source file location.

     * directories: List of directory-based inclusion/exclusion rules

     Directory rules are evaluated in order, with the last matching rule  deter-
     mining  inclusion/exclusion.   Empty  directories list means include every-
     thing.

   duplicates
     Filtering functionality based on duplicate detection.  Here you can  define
     which fields of the output file should be used in the duplicate detection.

     * match_on: List of fields to use for duplicate detection (file, arguments,
       directory, command, output)

   format
     Output formatting configuration:

     * paths.directory and paths.file: How to format paths of these fields.  The
       allowed values are:

       * as-is: No transformation,

       * canonical: Resolve to canonical path,

       * relative: Make relative to directory field,

       * absolute: Convert to absolute path,

     * entries.use_array_format: Use arguments array instead of command string

     * entries.include_output_field: Include output field in entries

   Default Configuration
     If  no  configuration  file is specified, Bear uses built-in defaults opti-
     mized for most use cases.

ENVIRONMENT
     RUST_LOG
	    Controls the logging level for Bear's internal operations.	This en-
	    vironment variable is essential for  troubleshooting  and  debugging
	    Bear's behavior.

	    Supported log levels (in order of verbosity):

	    * error - Only show critical errors

	    * warn - Show warnings and errors

	    * info - Show informational messages, warnings, and errors

	    * debug - Show detailed debugging information

	    Examples:

		   RUST_LOG=debug bear -- make all
		   RUST_LOG=info bear intercept -- cmake --build .

FILES
     The  configuration file bear.yml is searched in the following locations, in
     order:

     ./bear.yml
	    The current working directory.

     $XDG_CONFIG_HOME/bear.yml, $XDG_CONFIG_HOME/Bear/bear.yml (Unix)
	    When $XDG_CONFIG_HOME is set.

     $HOME/.config/bear.yml, $HOME/.config/Bear/bear.yml (Unix)
	    When $XDG_CONFIG_HOME is unset.

     %LOCALAPPDATA%\bear.yml, %LOCALAPPDATA%\Bear\bear.yml (Windows)
	    When %LOCALAPPDATA% is set.

     %APPDATA%\bear.yml, %APPDATA%\Bear\bear.yml (Windows)
	    When %APPDATA% is set.

     The first file found is loaded; remaining locations are not consulted.

EXIT STATUS
     Bear returns the exit status of the executed build command when running  in
     combined  or intercept mode.  When the build command succeeds, Bear returns
     0.  When the build command fails, Bear returns the same non-zero exit code.

     In semantic mode, Bear returns 0 on success and a non-zero exit code if se-
     mantic analysis fails.

     If Bear itself encounters an  internal  error  or	crashes,  it  returns  a
     non-zero exit code regardless of the build command's status.

TROUBLESHOOTING
     The  potential  problems  you can face with are: the build with and without
     Bear behaves differently or the output is empty.

   Debug Logging
     Before reporting any issues, always run Bear with debug logging enabled:

	    RUST_LOG=debug bear -- your-build-command

     This will provide detailed information about  Bear's  internal  operations.
     And  the  debug output is essential for diagnosing problems and must be in-
     cluded in any bug reports.

   Common Issues
     The most common cause for empty outputs is that the build command	did  not
     execute  any  commands.   The reason for that could be, because incremental
     builds not running the compilers if everything  is  up-to-date.   Remember,
     Bear does not understand the build file (eg.: makefile), but intercepts the
     executed commands.

     The other common cause for empty output is that the build has a "configure"
     step, which captures the compiler to build the project.  In case of Bear is
     using  the  wrapper  mode, it needs to run the configure step with Bear too
     (and discard that output), before run the build with Bear.

   Compiler Env Vars With Flags
     In wrapper mode, Bear accepts compiler environment variables that	carry  a
     trailing flag or two, matching the GNU Make convention:

	    CC="gcc -std=c11" make
	    CXX="clang++ -stdlib=libc++" make
	    CC="/usr/local/bin/gcc -m32" make

     Bear  splits  the value on whitespace, resolves the first token as the com-
     piler, and rewrites  the  variable  so  the  build  still	sees  the  flags
     (CC=<wrapper_path> -std=c11).

     This  convention  is a Unix / GNU Make inheritance; it applies when bear --
     make runs under sh/bash (including MSYS2, Git Bash, WSL  on  Windows),  not
     under native Windows build systems (MSBuild, nmake, cmd, PowerShell), which
     do not consume CC/CXX from the environment.

     For  anything  beyond  simple whitespace-separated tokens (flags containing
     spaces, shell quoting, metacharacters, command substitutions), use  CFLAGS,
     CXXFLAGS,	or  LDFLAGS  instead of packing it into CC.  Those variables are
     the portable channel for compilation flags and every build  system  expects
     them.   Bear  does  not  parse or rewrite them; they reach the compiler un-
     touched.

   Getting Help
     There could be many reasons for any of these failures.  When seeking help:

     1. Always include debug logs (RUST_LOG=debug) in your report

     2. Consult the project wiki page for known problems

     3. Search existing issues before opening a new bug report

     4. Follow the bug report template, provide the requested fields

COPYRIGHT
     Copyright (C) 2012-2026 by LA!szlA^3 Nagy https://github.com/rizsotto/Bear

AUTHORS
     LA!szlA^3 Nagy.

Bear User Manuals		  June 2, 2026				 BEAR(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=bear&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help