diff --git a/Snakefile b/Snakefile
index dcc3abbbaa6038fbbad88c27e876ab9fc34869b8..7389e85f5fa876d5115cc9607d0b017f07b72b70 100644
--- a/Snakefile
+++ b/Snakefile
@@ -1,13 +1,19 @@
+ROOT_BUILD_DIR = os.getenv("ROOT_BUILD_DIR", None)
+
+if ROOT_BUILD_DIR is not None:
+    ROOT_BUILD_DIR_PREFIX = f"{ROOT_BUILD_DIR.rstrip('/')}/{os.getcwd().lstrip('/')}/"
+else:
+    ROOT_BUILD_DIR_PREFIX = ""
+
 rule compile_analysis:
     input:
         "{path}/{filename}.cxx",
     output:
-        "{path}/{filename}_cxx.d",
-        "{path}/{filename}_cxx.so",
-        "{path}/{filename}_cxx_ACLiC_dict_rdict.pcm",
+        ROOT_BUILD_DIR_PREFIX + "{path}/{filename}_cxx.d",
+        ROOT_BUILD_DIR_PREFIX + "{path}/{filename}_cxx.so",
+        ROOT_BUILD_DIR_PREFIX + "{path}/{filename}_cxx_ACLiC_dict_rdict.pcm",
     shell:
         """
-unset ROOT_BUILD_DIR # use shadow rules in Snakemake instead
 root -l -b -q -e '.L {input}+'
 """
 
diff --git a/benchmarks/diffractive_vm/Snakefile b/benchmarks/diffractive_vm/Snakefile
index 0801237c44e6797eb7ee919f4cbf01022abee996..35732e1c0ea9fb008099db8da3ae5251fd92893c 100644
--- a/benchmarks/diffractive_vm/Snakefile
+++ b/benchmarks/diffractive_vm/Snakefile
@@ -12,8 +12,8 @@ S3 = S3RemoteProvider(
 
 rule diffractive_vm_compile:
     input:
-        "benchmarks/diffractive_vm/analysis/diffractive_vm_cxx.so",
-        "benchmarks/diffractive_vm/analysis/plot_cxx.so",
+        ROOT_BUILD_DIR_PREFIX + "benchmarks/diffractive_vm/analysis/diffractive_vm_cxx.so",
+        ROOT_BUILD_DIR_PREFIX + "benchmarks/diffractive_vm/analysis/plot_cxx.so",
 
 
 rule diffractive_vm_get:
@@ -73,7 +73,7 @@ DETECTOR_CONFIG={wildcards.DETECTOR_CONFIG} eicrecon {input} -Ppodio:output_file
 rule diffractive_vm_analysis:
     input:
         script="benchmarks/diffractive_vm/analysis/diffractive_vm.cxx",
-        script_compiled="benchmarks/diffractive_vm/analysis/diffractive_vm_cxx.so",
+        script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/diffractive_vm/analysis/diffractive_vm_cxx.so",
         data="reco/{DETECTOR_CONFIG}/{SIM}sartre_{PARTICLE}{SUFFIX}.edm4eic.root",
     params:
         EBEAM=18,
@@ -141,7 +141,7 @@ ruleorder: diffractive_vm_combine_sartre > diffractive_vm_analysis
 rule diffractive_vm_plots:
     input:
         script="benchmarks/diffractive_vm/analysis/plot.cxx",
-        script_compiled="benchmarks/diffractive_vm/analysis/plot_cxx.so",
+        script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/diffractive_vm/analysis/plot_cxx.so",
         config="{RESULT_PREFIX}/config.json",
     output:
         "{RESULT_PREFIX}/plots_benchmark-phi-dsigmadt.pdf",