diff --git a/CHANGES.md b/CHANGES.md
index d1d91219e0b..7f84a209551 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,10 @@
 Unreleased
 ----------
 
+- Add the `enabled_if` field to `inline_tests` within the `library` stanza.
+  This allows us to disable executing the inline tests while still allowing for
+  compilation (#4939, @rgrinberg)
+
 - Generate a `dune-project` when initializing projects with `dune init proj ...`
   (#4881, closes #4367, @shonfeder)
 
diff --git a/src/dune_rules/inline_tests.ml b/src/dune_rules/inline_tests.ml
index acab067101e..3e1d49f27ff 100644
--- a/src/dune_rules/inline_tests.ml
+++ b/src/dune_rules/inline_tests.ml
@@ -76,8 +76,7 @@ include Sub_system.Register_end_point (struct
   module Mode_conf = Inline_tests_info.Mode_conf
   module Info = Inline_tests_info.Tests
 
-  let gen_rules c ~(info : Info.t) ~backends =
-    let open Memo.Build.O in
+  let gen_rules c ~expander ~(info : Info.t) ~backends =
     let { Sub_system.Library_compilation_context.super_context = sctx
         ; dir
         ; stanza = lib
@@ -104,8 +103,8 @@ include Sub_system.Register_end_point (struct
       let src_dir = Path.build inline_test_dir in
       Module.generated ~src_dir name
     in
+    let open Memo.Build.O in
     let modules = Modules.singleton_exe main_module in
-    let* expander = Super_context.expander sctx ~dir in
     let runner_libs =
       let open Resolve.Build.O in
       let* libs =
@@ -258,6 +257,20 @@ include Sub_system.Register_end_point (struct
                       (Path.Build.extend_basename
                          (Path.as_in_build_dir_exn fn)
                          ~suffix:".corrected")))))
+
+  let gen_rules c ~(info : Info.t) ~backends =
+    let open Memo.Build.O in
+    let { dir; Sub_system.Library_compilation_context.super_context = sctx; _ }
+        =
+      c
+    in
+    let* expander = Super_context.expander sctx ~dir in
+    let* enabled_if = Expander.eval_blang expander info.enabled_if in
+    if enabled_if then
+      gen_rules c ~expander ~info ~backends
+    else
+      let alias = Alias.runtest ~dir in
+      Simple_rules.Alias_rules.add_empty sctx ~alias ~loc:(Some info.loc)
 end)
 
 let linkme = ()
diff --git a/src/dune_rules/inline_tests_info.ml b/src/dune_rules/inline_tests_info.ml
index e1960aa22f2..5c51eeef2f5 100644
--- a/src/dune_rules/inline_tests_info.ml
+++ b/src/dune_rules/inline_tests_info.ml
@@ -94,6 +94,7 @@ module Tests = struct
     ; executable : Ocaml_flags.Spec.t
     ; backend : (Loc.t * Lib_name.t) option
     ; libraries : (Loc.t * Lib_name.t) list
+    ; enabled_if : Blang.t
     }
 
   type Sub_system_info.t += T of t
@@ -122,8 +123,12 @@ module Tests = struct
          field "modes"
            (Dune_lang.Syntax.since syntax (1, 11) >>> Mode_conf.Set.decode)
            ~default:Mode_conf.Set.default
+       and+ enabled_if =
+         Enabled_if.decode ~allowed_vars:Any ~is_error:true
+           ~since:(Some (3, 0))
+           ()
        in
-       { loc; deps; flags; executable; backend; libraries; modes })
+       { loc; deps; flags; executable; backend; libraries; modes; enabled_if })
 
   (* We don't use this at the moment, but we could implement it for debugging
      purposes *)
diff --git a/src/dune_rules/inline_tests_info.mli b/src/dune_rules/inline_tests_info.mli
index 283c88787c3..ff21db6ced1 100644
--- a/src/dune_rules/inline_tests_info.mli
+++ b/src/dune_rules/inline_tests_info.mli
@@ -45,6 +45,7 @@ module Tests : sig
     ; executable : Ocaml_flags.Spec.t
     ; backend : (Loc.t * Lib_name.t) option
     ; libraries : (Loc.t * Lib_name.t) list
+    ; enabled_if : Blang.t
     }
 
   val backends : t -> (Loc.t * Lib_name.t) list option
diff --git a/test/blackbox-tests/test-cases/inline_tests/enabled-if.t b/test/blackbox-tests/test-cases/inline_tests/enabled-if.t
new file mode 100644
index 00000000000..2be8585e400
--- /dev/null
+++ b/test/blackbox-tests/test-cases/inline_tests/enabled-if.t
@@ -0,0 +1,22 @@
+enabled_if inside the inline_tests field in the library stanza
+
+  $ mkdir tmp && cd tmp
+  $ cat >dune-project <<EOF
+  > (lang dune 3.0)
+  > EOF
+  $ cat >dune <<EOF
+  > (library
+  >  (name backend_mbc)
+  >  (modules ())
+  >  (inline_tests.backend
+  >   (generate_runner (echo "print_endline \"backend_mbc\""))))
+  > 
+  > (library
+  >  (name foo_mbc)
+  >  (inline_tests
+  >   (enabled_if false)
+  >   (backend backend_mbc))
+  >  (libraries backend_mbc))
+  > EOF
+
+  $ dune runtest