diff --git a/CMakeLists.txt b/CMakeLists.txt
index 19b583c3dd5311abb45124333a2a536763535b67..066ca6b03b823532a40d163bad9c99366960b0df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -52,3 +52,15 @@ install(EXPORT ${PROJECT_NAME}Targets
   )
 
 gaudi_install(CMAKE cmake/${PROJECT_NAME}Config.cmake)
+
+file(WRITE ${CMAKE_BINARY_DIR}/setup.sh.in
+    "#!/bin/bash\n"
+    "# Generated by cmake \n"
+    "# Following is the extra envvar:\n"
+    "@RUN_SCRIPT_EXTRA_COMMANDS@"
+)
+configure_file("${CMAKE_BINARY_DIR}/setup.sh.in" "${CMAKE_BINARY_DIR}/setup.sh"
+               @ONLY)
+
+install(FILES "${CMAKE_BINARY_DIR}/setup.sh"
+        DESTINATION ${CMAKE_INSTALL_PREFIX})
diff --git a/build-k4.sh b/build-k4.sh
index 6e2e3bdb10466804663b8b424ae7487062b344ec..4570c559aca12e47b9e7cc603af30ab9cd259d59 100755
--- a/build-k4.sh
+++ b/build-k4.sh
@@ -104,6 +104,10 @@ function run-make() {
     cmake --build .
 }
 
+function run-install() {
+    cmake --install .
+}
+
 ##############################################################################
 # Parse the command line options
 ##############################################################################
@@ -120,3 +124,5 @@ check-working-builddir || exit -1
 run-cmake || exit -1
 
 run-make || exit -1
+
+run-install || exit -1
diff --git a/build.sh b/build.sh
index 337287fe081bdbf364c5fa2b856dc0a4534aa9df..14c0ab21509ab61ea48b4715c25ea93efe5018c6 100755
--- a/build.sh
+++ b/build.sh
@@ -86,6 +86,10 @@ function run-make() {
     cmake --build .
 }
 
+function run-install() {
+    cmake --install .
+}
+
 ##############################################################################
 # Parse the command line options
 ##############################################################################
@@ -103,3 +107,5 @@ check-working-builddir || exit -1
 run-cmake || exit -1
 
 run-make || exit -1
+
+run-install || exit -1
diff --git a/setup.sh b/setup.sh
index a75d5f39d2d3fca4d0501c970c74648b69229014..2f285d787a7087dcaace21117037477796846070 100644
--- a/setup.sh
+++ b/setup.sh
@@ -9,6 +9,8 @@
 # Author: Tao Lin <lintao@ihep.ac.cn>
 ##############################################################################
 
+THISSCRITDIR=$(dirname $(readlink -e "${BASH_SOURCE[0]}" 2>/dev/null) 2>/dev/null) # Darwin readlink doesnt accept -e
+
 function info:() {
     echo "INFO: $*" 1>&2
 }
@@ -41,6 +43,25 @@ function setup-external() {
 
 }
 
+function setup-install-area() {
+    local installarea=$THISSCRITDIR/InstallArea
+    if [ ! -d "$installarea" ]; then
+        return
+    fi
+
+    export PATH=$installarea/bin:$PATH
+    export LD_LIBRARY_PATH=$installarea/lib:$LD_LIBRARY_PATH
+    export PYTHONPATH=$installarea/lib:$PYTHONPATH
+    export PYTHONPATH=$installarea/python:$PYTHONPATH
+    export ROOT_INCLUDE_PATH=$installarea/include:$ROOT_INCLUDE_PATH
+
+    local extrasetupscript=$installarea/setup.sh
+    if [ -f "$extrasetupscript" ]; then
+        source $extrasetupscript
+    fi
+
+    info: "Setup CEPCSW: $installarea"
+}
 
 ##############################################################################
 # Parse the command line options
@@ -54,3 +75,4 @@ fi
 export CEPCSW_LCG_VERSION
 
 setup-external
+setup-install-area