diff --git a/sbs b/sbs
index b3937ddf8a1cb7187ca7fdf07cd229dd83ffa58e..605748e03f0a2b46ee499d5754355ca071578bce 100755
--- a/sbs
+++ b/sbs
@@ -55,6 +55,7 @@ configure() {
         $config_ccache \
         $config_toolchain \
         $config_ninja \
+        $config_buildtype \
         $config_verbose \
         "$source_dir"
 }
@@ -69,14 +70,17 @@ flash() { build "$1" && [ -f "$build_dir/$1.bin" ] && echo && st-flash --reset w
 
 lint() { "$sbs_base/scripts/linter.sh" "$source_dir/src/shared"; }
 
-list() { check_configured && echo "[1/1] All SBS targets available:" && \
-    cmake --build "$build_dir" $build_jobs --target help | grep -o '^[^/]*\.bin' | cut -f 1 -d '.'; }
+list() { check_configured && echo "[1/1] All SBS targets available:" \
+    && cmake --build "$build_dir" $build_jobs --target help | grep -o '^[^/]*\.bin' | cut -f 1 -d '.'; }
 
 boards() { check_configured && cmake --build "$build_dir" $build_jobs --target help-boards; }
 
-check_configured() { ([ ! -d "$build_dir" ] || [ ! -f "$build_dir/CMakeCache.txt" ] && rm -rf "$build_dir") && configure && echo || true; }
+check_configured() { ([ "$to_reconfigure" = true ] || [ ! -d "$build_dir" ] || [ ! -f "$build_dir/CMakeCache.txt" ] && rm -rf "$build_dir") \
+    && configure && echo || true; }
 
-set_verbose() { config_verbose="-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"; }
+set_debug() { config_buildtype="-DCMAKE_BUILD_TYPE=Debug" && to_reconfigure=true; }
+
+set_verbose() { config_verbose="-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" && to_reconfigure=true; }
 
 set_jobs() { build_jobs="-j $1"; }
 
@@ -91,11 +95,12 @@ OPTIONS:
                         Build a specific target
   -f TARGET, --flash TARGET
                         Build and flash a specific target
+  -j JOBS, --jobs JOBS  Build in parallel using the given number of jobs
+  -d, --debug           Enable debug
+  -v, --verbose         Print a verbose output
   -n, --lint            Run the linter
   -l, --list            List all targets available
   -r, --boards          List all boards available
-  -v, --verbose         Print a verbose output
-  -j JOBS, --jobs JOBS  Build in parallel using the given number of jobs
 EOF
 }
 
@@ -104,8 +109,10 @@ print_banner
 sbs_base="$(cd -- "$(dirname "$0")" > /dev/null 2>&1; pwd -P)"
 source_dir="$PWD"
 build_dir="$source_dir/build"
+config_buildtype="-DCMAKE_BUILD_TYPE=Release"
 config_verbose=
 build_jobs=
+to_reconfigure=false
 
 ccache_found="$(command -v ccache)"
 ninja_found="$(command -v ninja)"
@@ -117,26 +124,28 @@ for arg in "$@"; do
         --clean)    set -- "$@" "-c";;
         --build)    set -- "$@" "-b";;
         --flash)    set -- "$@" "-f";;
+        --jobs)     set -- "$@" "-j";;
+        --debug)    set -- "$@" "-d";;
+        --verbose)  set -- "$@" "-v";;
         --lint)     set -- "$@" "-n";;
         --list)     set -- "$@" "-l";;
         --boards)   set -- "$@" "-r";;
-        --verbose)  set -- "$@" "-v";;
-        --jobs)     set -- "$@" "-j";;
         *)          set -- "$@" "$arg"
     esac
 done
 
-while getopts hcb:f:nlrvj: opt; do
+while getopts hcb:f:j:dvnlr opt; do
     case "$opt" in
         h)  usage; exit 0;;
         c)  clean; exit $?;;
         b)  build "$OPTARG"; exit $?;;
         f)  flash "$OPTARG"; exit $?;;
+        j)  set_jobs "$OPTARG";;
+        d)  set_debug;;
+        v)  set_verbose;;
         n)  lint; exit $?;;
         l)  list; exit $?;;
         r)  boards; exit $?;;
-        v)  set_verbose;;
-        j)  set_jobs "$OPTARG";;
         ?)  usage; exit 2;;
     esac
 done