diff --git a/CMakeLists.txt b/CMakeLists.txt
index 67dd8076f1b9372944e3133bfc871bd580040bbd..a5546a95e4d9a0573ac576b8109ff3e8f06cc619 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -61,6 +61,8 @@ endif()
 
 file(MAKE_DIRECTORY ${STAGE_DIR} ${HEADER_STAGE_PATH} ${LIB_STAGE_PATH})
 
+setup_compiler_flags()
+
 # Python needed before Boost
 find_package(Python 3.6.0 REQUIRED)
 # Split version string
diff --git a/cmake_support/QMEAN2.cmake b/cmake_support/QMEAN2.cmake
index 38dd051cc0d97482d775165cac8b4659d03f3248..6d6123065202a91d4f662c20418a7fd58a8325d6 100644
--- a/cmake_support/QMEAN2.cmake
+++ b/cmake_support/QMEAN2.cmake
@@ -899,3 +899,36 @@ macro(find_path_recursive VARIABLE)
     set(_fst_subs ${_tmp_dlist})
   endwhile(_fst_subs)
 endmacro(find_path_recursive)
+
+
+function(get_compiler_version _OUTPUT_VERSION)
+  exec_program(${CMAKE_CXX_COMPILER}
+               ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
+               OUTPUT_VARIABLE _COMPILER_VERSION
+  )
+  string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
+    _COMPILER_VERSION ${_COMPILER_VERSION})
+
+  set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
+endfunction(get_compiler_version)
+
+
+macro(setup_compiler_flags)
+  if(CMAKE_COMPILER_IS_GNUCXX)
+    get_compiler_version(_GCC_VERSION)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
+    if(_GCC_VERSION MATCHES "44")
+      # gcc 4.4. is very strict about aliasing rules. the shared_count
+      # implementation that is used boost's shared_ptr violates these rules. To
+      # silence the warnings and prevent miscompiles, enable
+      #  -fno-strict-aliasing
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing" )
+    endif()
+    #message(STATUS "GCC VERSION " ${_GCC_VERSION})
+    if (_GCC_VERSION LESS "60")
+      # for older compilers we need to enable C++11
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+    endif()
+  endif()
+endmacro(setup_compiler_flags)
+