diff --git a/Detector/GeoSvc/CMakeLists.txt b/Detector/GeoSvc/CMakeLists.txt
index c4b767e60920da0c3420d5a84afe58ddbf68ae2c..b0e86b467a522c2154ffd2aed8191092e57d5766 100644
--- a/Detector/GeoSvc/CMakeLists.txt
+++ b/Detector/GeoSvc/CMakeLists.txt
@@ -15,6 +15,8 @@ find_package(ROOT COMPONENTS MathCore GenVector Geom Tree)
 find_package(DD4hep COMPONENTS DDG4 DDRec REQUIRED)
 find_package(GEAR REQUIRED)
 
+message("GEAR_LIBRARIES: ${GEAR_LIBRARIES}")
+
 gaudi_add_module(GeoSvc
                  src/GeoSvc.cpp
                  INCLUDE_DIRS
@@ -25,7 +27,8 @@ gaudi_add_module(GeoSvc
                  LINK_LIBRARIES
                    DD4hep 
                    ${DD4hep_COMPONENT_LIBRARIES} 
-                   GaudiKernel 
-		   $ENV{GEAR}/lib/libgear.so
+                   GaudiKernel
+                   ${GEAR_LIBRARIES}
+                   ${ROOT_LIBRARIES}
                    # ROOT
 )
diff --git a/Digitisers/SimpleDigi/CMakeLists.txt b/Digitisers/SimpleDigi/CMakeLists.txt
index 90246e681c2ba41d66ff8c916e4a8d451a8c8503..5487682d59bb033f8b308d57a64a988255891aec 100644
--- a/Digitisers/SimpleDigi/CMakeLists.txt
+++ b/Digitisers/SimpleDigi/CMakeLists.txt
@@ -19,5 +19,5 @@ set(SimpleDigi_srcs src/*.cpp)
 # Modules
 gaudi_add_module(SimpleDigi ${SimpleDigi_srcs}
     INCLUDE_DIRS K4FWCore GaudiKernel GaudiAlgLib CLHEP gear ${GSL_INCLUDE_DIRS} ${LCIO_INCLUDE_DIRS}
-    LINK_LIBRARIES K4FWCore GaudiKernel GaudiAlgLib CLHEP $ENV{GEAR}/lib/libgearsurf.so ${GSL_LIBRARIES} ${LCIO_LIBRARIES} EDM4HEP::edm4hep EDM4HEP::edm4hepDict
+    LINK_LIBRARIES K4FWCore GaudiKernel GaudiAlgLib CLHEP ${GEAR_LIBRARIES} ${GSL_LIBRARIES} ${LCIO_LIBRARIES} EDM4HEP::edm4hep EDM4HEP::edm4hepDict
 )
diff --git a/Reconstruction/PFA/Pandora/GaudiPandora/CMakeLists.txt b/Reconstruction/PFA/Pandora/GaudiPandora/CMakeLists.txt
index 69a1ec90837073ba19b8038a71c0a190a1884f0a..0f8625a6c08586cf2202f7694363e1ebea35a531 100644
--- a/Reconstruction/PFA/Pandora/GaudiPandora/CMakeLists.txt
+++ b/Reconstruction/PFA/Pandora/GaudiPandora/CMakeLists.txt
@@ -39,7 +39,7 @@ set(dir_include include)
 # Modules
 gaudi_add_module(GaudiPandora ${dir_srcs}
     INCLUDE_DIRS ${dir_include} GaudiKernel FWCore CLHEP  ${LCIO_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} gear  
-    LINK_LIBRARIES GaudiKernel FWCore CLHEP ROOT ${LCIO_LIBRARIES} $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearxml.so DataHelperLib 
+    LINK_LIBRARIES GaudiKernel FWCore CLHEP ROOT ${LCIO_LIBRARIES} ${GEAR_LIBRARIES} DataHelperLib 
       -Wl,--no-as-needed 
       EDM4HEP::edm4hep EDM4HEP::edm4hepDict
       -Wl,--as-needed 
diff --git a/Reconstruction/PFA/Pandora/MatrixPandora/CMakeLists.txt b/Reconstruction/PFA/Pandora/MatrixPandora/CMakeLists.txt
index 84535b8eb8a3fce7d701c155d13c19520d349129..f99292cbd2294b48f7841c2524b09247f128ca75 100644
--- a/Reconstruction/PFA/Pandora/MatrixPandora/CMakeLists.txt
+++ b/Reconstruction/PFA/Pandora/MatrixPandora/CMakeLists.txt
@@ -38,7 +38,7 @@ set(dir_include include)
 # Modules
 gaudi_add_module(MatrixPandora ${dir_srcs}
     INCLUDE_DIRS ${dir_include} GaudiKernel FWCore CLHEP  ${LCIO_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} gear DD4hep  
-    LINK_LIBRARIES GaudiKernel FWCore CLHEP ROOT ${LCIO_LIBRARIES} $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearxml.so DD4hep ${DD4hep_COMPONENT_LIBRARIES} DDRec DataHelperLib
+    LINK_LIBRARIES GaudiKernel FWCore CLHEP ROOT ${LCIO_LIBRARIES} ${GEAR_LIBRARIES} DD4hep ${DD4hep_COMPONENT_LIBRARIES} DDRec DataHelperLib
       -Wl,--no-as-needed 
       EDM4HEP::edm4hep EDM4HEP::edm4hepDict
       -Wl,--as-needed 
diff --git a/Reconstruction/SiliconTracking/CMakeLists.txt b/Reconstruction/SiliconTracking/CMakeLists.txt
index 93d860ba31a396d5797b31746788a39533698e2d..27533d0dd47b0353ce1cdc2b085177459dd57f91 100644
--- a/Reconstruction/SiliconTracking/CMakeLists.txt
+++ b/Reconstruction/SiliconTracking/CMakeLists.txt
@@ -17,6 +17,6 @@ set(SiliconTracking_srcs src/*.cpp)
 
 # Modules
 gaudi_add_module(SiliconTracking ${SiliconTracking_srcs}
-    INCLUDE_DIRS GaudiKernel FWCore gear ${GSLx_INCLUDE_DIRS} ${LCIOx_INCLUDE_DIRS}
-    LINK_LIBRARIES TrackSystemSvcLib DataHelperLib KiTrackLib GaudiKernel FWCore $ENV{GEAR}/lib/libgearsurf.so ${GSL_LIBRARIES} ${LCIO_LIBRARIES} 
+    INCLUDE_DIRS GaudiKernel FWCore gear ${GSL_INCLUDE_DIRS} ${LCIO_INCLUDE_DIRS}
+    LINK_LIBRARIES TrackSystemSvcLib DataHelperLib KiTrackLib GaudiKernel FWCore ${GEAR_LIBRARIES} ${GSL_LIBRARIES} ${LCIO_LIBRARIES} 
 )
diff --git a/Service/GearSvc/CMakeLists.txt b/Service/GearSvc/CMakeLists.txt
index f78d581ad47f95e7a74ffb61883c152cceffca7e..52beee1e171a5a31071ab88efaeb241e27360d6a 100644
--- a/Service/GearSvc/CMakeLists.txt
+++ b/Service/GearSvc/CMakeLists.txt
@@ -10,5 +10,5 @@ gaudi_install_headers(GearSvc)
 
 gaudi_add_module(GearSvc ${GearSvc_srcs}
     INCLUDE_DIRS GaudiKernel gear
-    LINK_LIBRARIES GaudiKernel $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearxml.so
+    LINK_LIBRARIES GaudiKernel ${GEAR_LIBRARIES}
 )
diff --git a/Service/TrackSystemSvc/CMakeLists.txt b/Service/TrackSystemSvc/CMakeLists.txt
index 98f32914f19370b83261a09ff94619532c2c67d6..349b3b6b5dc1889b6ab813a635421d6c2edc6cbf 100644
--- a/Service/TrackSystemSvc/CMakeLists.txt
+++ b/Service/TrackSystemSvc/CMakeLists.txt
@@ -21,7 +21,7 @@ gaudi_install_headers(TrackSystemSvc)
 gaudi_add_library(TrackSystemSvcLib ${TrackSystemSvcLib_srcs}
     PUBLIC_HEADERS TrackSystemSvc
     INCLUDE_DIRS GaudiKernel ROOT CLHEP gear ${LCIO_INCLUDE_DIRS} ${EDM4HEP_INCLUDE_DIRS}
-    LINK_LIBRARIES DataHelperLib KalTestLib KalDetLib GaudiKernel ROOT CLHEP $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearsurf.so ${LCIO_LIBRARIES}
+    LINK_LIBRARIES DataHelperLib KalTestLib KalDetLib GaudiKernel ROOT CLHEP ${GEAR_LIBRARIES} ${LCIO_LIBRARIES}
      -Wl,--no-as-needed
      EDM4HEP::edm4hep EDM4HEP::edm4hepDict
      -Wl,--as-needed
@@ -29,5 +29,5 @@ gaudi_add_library(TrackSystemSvcLib ${TrackSystemSvcLib_srcs}
 
 gaudi_add_module(TrackSystemSvc ${TrackSystemSvc_srcs}
 				INCLUDE_DIRS GaudiKernel gear 
-				LINK_LIBRARIES TrackSystemSvcLib GaudiKernel $ENV{GEAR}/lib/libgear.so
+				LINK_LIBRARIES TrackSystemSvcLib GaudiKernel ${GEAR_LIBRARIES}
 )
diff --git a/Utilities/KalDet/CMakeLists.txt b/Utilities/KalDet/CMakeLists.txt
index 5b4c1a9456ba59044d7d293cc6ceb7549687787d..147328d0ac412e26e74227b12983e9385f827374 100644
--- a/Utilities/KalDet/CMakeLists.txt
+++ b/Utilities/KalDet/CMakeLists.txt
@@ -76,5 +76,5 @@ set( KalDetLib_srcs ${LIB_SOURCES} ${COMMON_SOURCES} )
 
 gaudi_add_library(KalDetLib ${KalDetLib_srcs}
 		 PUBLIC_HEADERS kaldet
-                 LINK_LIBRARIES GaudiKernel ROOT CLHEP LCIO $ENV{GEAR}/lib/libgearsurf.so KalTestLib EDM4HEP::edm4hep EDM4HEP::edm4hepDict
+                 LINK_LIBRARIES GaudiKernel ROOT CLHEP LCIO ${GEAR_LIBRARIES} KalTestLib EDM4HEP::edm4hep EDM4HEP::edm4hepDict
 )
diff --git a/build-k4.sh b/build-k4.sh
new file mode 100755
index 0000000000000000000000000000000000000000..27c6f3570f934f8db68066e5553b65f010d9a68f
--- /dev/null
+++ b/build-k4.sh
@@ -0,0 +1,107 @@
+#!/bin/bash
+##############################################################################
+# Setup script for CEPCSW:
+# - build the cepcsw
+#
+# Usage:
+# $ bash build.sh
+# or:
+# $ 
+#
+# Author: Tao Lin <lintao@ihep.ac.cn>
+##############################################################################
+
+function info:() {
+    echo "INFO: $*" 1>&2
+}
+
+function error:() {
+    echo "ERROR: $*" 1>&2
+}
+
+function check-cepcsw-envvar() {
+    source /cvmfs/sw.hsf.org/key4hep/setup.sh
+}
+
+function build-dir() {
+    local blddir=build
+
+    # If detect the extra env var, append it to the build dir
+    if [ -n "${k4_version}" ]; then
+        blddir=${blddir}.${k4_version}
+    fi
+    if [ -n "${k4_platform}" ]; then
+        blddir=${blddir}.${k4_platform}
+    fi
+
+    echo $blddir
+}
+
+function check-working-builddir() {
+    local blddir=$(build-dir)
+    if [ ! -d "$blddir" ]; then
+        mkdir $blddir || {
+            error: "Failed to create $blddir"
+            return 1
+        }
+    fi
+}
+
+function run-cmake() {
+    local blddir=$(build-dir)
+
+    if [ ! -d "$blddir" ]; then
+        error: "Failed to create $blddir"
+        return 1
+    fi
+
+    cd $blddir
+
+    local clhep_prefix=$(eval echo $(clhep-config --prefix))
+    local clhep_include=${clhep_prefix}/include
+
+    # locate the pandorapfa
+    local pandorapfa=$(echo $CMAKE_PREFIX_PATH | tr ':' '\n' | grep pandorapfa | head -n1)
+    info: "Find PandoraPFA: $pandorapfa"
+    if [ -z "$pandorapfa" ]; then
+        error: "Failed to find the PandoraPFA"
+        return 1
+    fi
+    
+    local pandorapfa_cmake_modules=${pandorapfa}/cmakemodules
+    info: "Find PandoraPFA cmake: ${pandorapfa_cmake_modules}"
+    if [ ! -d "${pandorapfa_cmake_modules}" ]; then
+        error: "Failed to find the cmake modules for PandoraPFA: ${pandorapfa_cmake_modules}"
+        return 1
+    fi
+
+    local cmake_modules=${pandorapfa_cmake_modules}
+
+    cmake .. -DHOST_BINARY_TAG=${k4_platform} \
+          -DCLHEP_INCLUDE_DIR=${clhep_include} \
+          -DCMAKE_MODULE_PATH=${cmake_modules} || {
+        error: "Failed to cmake"
+        return 1
+    }
+
+}
+
+function run-make() {
+    make
+}
+
+##############################################################################
+# Parse the command line options
+##############################################################################
+
+# The current default platform
+k4_platform=x86_64-linux-gcc9-opt
+k4_version=master
+
+check-cepcsw-envvar || exit -1
+
+check-working-builddir || exit -1
+
+run-cmake || exit -1
+
+run-make || exit -1