diff --git a/CMakeLists.txt b/CMakeLists.txt
index df152d8cb7908307618932680a2552e7f6acee25..722006dddfdd262cf68845d144bd629fc7e866ea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -52,6 +52,10 @@ endif()
 set(OGS_PETSC_CONFIG_OPTIONS "" CACHE STRING
                                       "Additional PETSc configuration options."
 )
+cmake_dependent_option(
+    OGS_INSTALL_PETSC "Install CPM petsc into CMAKE_INSTALL_PREFIX?" OFF
+    OGS_USE_PETSC OFF
+)
 option(OGS_USE_CVODE "Use the Sundials CVODE module?" OFF)
 option(OGS_BUILD_UTILS "Should the utilities programs be built?" ON)
 option(OGS_BUILD_TESTING "Should the tests be built?" ON)
diff --git a/scripts/cmake/DependenciesExternalProject.cmake b/scripts/cmake/DependenciesExternalProject.cmake
index c70913b7483520d77bf202cae37ee58e3e8a8607..b8901642363836ec986f7bb79ae5cac4fdb20d10 100644
--- a/scripts/cmake/DependenciesExternalProject.cmake
+++ b/scripts/cmake/DependenciesExternalProject.cmake
@@ -6,11 +6,11 @@ if(OGS_USE_MFRONT)
     find_program(MFRONT mfront)
     if(NOT MFRONT)
         BuildExternalProject(
-            TFEL GIT_REPOSITORY https://github.com/thelfer/tfel.git
+            TFEL
+            GIT_REPOSITORY https://github.com/thelfer/tfel.git
             GIT_TAG rliv-${ogs.minimum_version.tfel-rliv}
-            CMAKE_ARGS
-                -DCMAKE_INSTALL_RPATH=<INSTALL_DIR>/lib
-                -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE
+            CMAKE_ARGS -DCMAKE_INSTALL_RPATH=<INSTALL_DIR>/lib
+                       -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE
         )
         set(TFELHOME ${PROJECT_BINARY_DIR}/_ext/TFEL CACHE PATH "")
     endif()
@@ -41,6 +41,9 @@ if(OGS_USE_PETSC)
         if(ENV{CXX})
             list(APPEND _configure_opts --with-cxx=$ENV{CXX})
         endif()
+        if(OGS_INSTALL_PETSC)
+            set(_petsc_install_dir INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
+        endif()
         BuildExternalProject(
             PETSc
             LOG_OUTPUT_ON_FAILURE ON
@@ -52,9 +55,13 @@ if(OGS_USE_PETSC)
                 ${OGS_PETSC_CONFIG_OPTIONS}
             BUILD_IN_SOURCE ON
             BUILD_COMMAND make -j all
-            INSTALL_COMMAND make -j install
+            INSTALL_COMMAND make -j install ${_petsc_install_dir}
         )
-        set(PETSC_DIR ${PROJECT_BINARY_DIR}/_ext/PETSc CACHE PATH "" FORCE)
+        if(OGS_INSTALL_PETSC)
+            set(PETSC_DIR ${CMAKE_INSTALL_PREFIX} CACHE PATH "" FORCE)
+        else()
+            set(PETSC_DIR ${PROJECT_BINARY_DIR}/_ext/PETSc CACHE PATH "" FORCE)
+        endif()
         find_package(PETSc ${ogs.minimum_version.petsc} REQUIRED)
     endif()