diff --git a/CHANGES/v2.2.txt b/CHANGES/v2.2.txt
index 2347b263410ef50e5b2717ef1b7f5ee18326aabe..4e2fa27581ddb0bf8764b4c35dfc137ff8a3f82d 100644
--- a/CHANGES/v2.2.txt
+++ b/CHANGES/v2.2.txt
@@ -149,12 +149,13 @@ For users:
 - Files are now flushed at the correct step. Before this fix, they were flushed at the step before the requested one
   (e.g. with \ref FLUSH STRIDE=100 at step 99, 199, etc).
 - In \ref METAD, INTERVAL with periodic variables now report an error.
-- Added --disable-dependency-tracking to ./configure
 - \ref LOAD now works also when plumed is installed with a suffix.
 - Added `--md-root` option to `plumed patch` which allows it to be run from a directory different from the one
   where the md code is located.
 
 For developers:
+- `./configure` checks if dependencies can be generated. If not, they are disabled.
+- Added --disable-dependency-tracking to ./configure
 - Added a make target `all_plus_doc` that builds both code and docs.
 - Added possibility to set a default location for plumed library in runtime binding.
   If the plumed wrapped is compiled with `-D__PLUMED_DEFAULT_KERNEL=/path/libplumedKernel.so`,
diff --git a/configure b/configure
index 2686d448c5fba34d86ac3e1e5bb06c9a046ffecf..5e5458397265f995c85f462e346fc7a9a1ca824f 100755
--- a/configure
+++ b/configure
@@ -625,7 +625,6 @@ program_name
 LD_RO
 program_can_run_mpi
 program_can_run
-disable_dependency_tracking
 xxd
 make_pdfdoc
 dot
@@ -636,6 +635,7 @@ OPENMP_CXXFLAGS
 EGREP
 GREP
 CXXCPP
+disable_dependency_tracking
 ac_ct_FC
 FCFLAGS
 FC
@@ -5008,6 +5008,41 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
+
+if test "$dependency_tracking" = true
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX can generate dependency file with -MM -MF" >&5
+$as_echo_n "checking whether $CXX can generate dependency file with -MM -MF... " >&6; }
+  dependency=ko
+  echo "#include \"conftest1.h\"" > conftest.cpp
+  echo "#include \"conftest2.h\"" > conftest1.h
+  echo "/* */" > conftest2.h
+  $CXX $CXXFLAGS -c -MM -MFconftest.d conftest.cpp 1> /dev/null 2> /dev/null
+  grep conftest2 conftest.d 1> /dev/null 2>/dev/null && dependency=ok
+  if test "$dependency" = ok ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    disable_dependency_tracking=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    disable_dependency_tracking=yes
+  fi
+else
+  disable_dependency_tracking=yes
+fi
+
+if test "$disable_dependency_tracking" = yes ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dependencies tracking disabled - always make clean before make" >&5
+$as_echo "$as_me: WARNING: dependencies tracking disabled - always make clean before make" >&2;}
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: dependency tracking enabled" >&5
+$as_echo "$as_me: dependency tracking enabled" >&6;}
+fi
+
+
+
+
 #### Compulsory libraries ####
 # some of them might be made optional if we find that are not available in some system
 { $as_echo "$as_me:${as_lineno-$LINENO}: Now we will check compulsory headers and libraries" >&5
@@ -6856,18 +6891,6 @@ then
 fi
 
 
-if test "$dependency_tracking" = true
-then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: dependency tracking enabled" >&5
-$as_echo "$as_me: dependency tracking enabled" >&6;}
-  disable_dependency_tracking=no
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: dependency tracking disabled" >&5
-$as_echo "$as_me: dependency tracking disabled" >&6;}
-  disable_dependency_tracking=yes
-fi
-
-
 program_can_run=""
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can be run on this machine" >&5
 $as_echo_n "checking whether a program can be run on this machine... " >&6; }
diff --git a/configure.ac b/configure.ac
index bc4c9502bf15317c9c7d48ce2f0e554337cb8d2d..4ccf6a2e407b38b7a362ca88949019113b35ba7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -279,6 +279,36 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ class A{explicit A(){}};])],
   [AC_MSG_RESULT([no]) ;
    AC_DEFINE([explicit],[])])
 
+AC_SUBST(disable_dependency_tracking)
+
+if test "$dependency_tracking" = true
+then
+  AC_MSG_CHECKING([whether $CXX can generate dependency file with -MM -MF])
+  dependency=ko
+  echo "#include \"conftest1.h\"" > conftest.cpp
+  echo "#include \"conftest2.h\"" > conftest1.h
+  echo "/* */" > conftest2.h
+  $CXX $CXXFLAGS -c -MM -MFconftest.d conftest.cpp 1> /dev/null 2> /dev/null
+  grep conftest2 conftest.d 1> /dev/null 2>/dev/null && dependency=ok
+  if test "$dependency" = ok ; then
+    AC_MSG_RESULT([yes])
+    disable_dependency_tracking=no
+  else
+    AC_MSG_RESULT([no])
+    disable_dependency_tracking=yes
+  fi
+else
+  disable_dependency_tracking=yes
+fi
+
+if test "$disable_dependency_tracking" = yes ; then
+  AC_MSG_WARN([dependencies tracking disabled - always make clean before make])
+else
+  AC_MSG_NOTICE([dependency tracking enabled])
+fi
+
+
+
 
 #### Compulsory libraries ####
 # some of them might be made optional if we find that are not available in some system
@@ -598,16 +628,6 @@ then
   AC_MSG_ERROR([xxd should be installed for PLUMED to compile properly])
 fi
 
-AC_SUBST(disable_dependency_tracking)
-if test "$dependency_tracking" = true
-then
-  AC_MSG_NOTICE([dependency tracking enabled])
-  disable_dependency_tracking=no
-else
-  AC_MSG_NOTICE([dependency tracking disabled])
-  disable_dependency_tracking=yes
-fi
-
 AC_SUBST(program_can_run)
 program_can_run=""
 AC_MSG_CHECKING([whether a program can be run on this machine])