diff --git a/cmake/BuildSophia.cmake b/cmake/BuildSophia.cmake
index 4cb41d7fab0b5c08f52b8628cb26a079756ec515..ef36158b9a3f7df297d58f4efe643ecfdd6848a8 100644
--- a/cmake/BuildSophia.cmake
+++ b/cmake/BuildSophia.cmake
@@ -6,7 +6,8 @@ macro(sophia_build)
     if (${PROJECT_BINARY_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
 		add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/third_party/sophia/db/libsophia.a
 			WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/third_party/sophia
-			COMMAND $(MAKE) -C db
+			COMMAND $(MAKE) -C db libsophia.a
+			DEPENDS ${CMAKE_SOURCE_DIR}/CMakeCache.txt
 		)
     else()
         add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/sophia
@@ -14,8 +15,8 @@ macro(sophia_build)
         )
 		add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/sophia/db/libsophia.a
 			WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/third_party/sophia
-            COMMAND cp -r ${PROJECT_SOURCE_DIR}/third_party/sophia/* .
-			COMMAND $(MAKE) -C db
+            COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/sophia ${PROJECT_BINARY_DIR}/third_party/sophia
+			COMMAND $(MAKE) -C db libsophia.a
             DEPENDS ${PROJECT_BINARY_DIR}/CMakeCache.txt ${PROJECT_BINARY_DIR}/third_party/sophia
 		)
     endif()