diff --git a/CMakeLists.txt b/CMakeLists.txt
index eb4522800688939b23d5b34021283ee5f8d7d99d..2392c2dc0baf020290fe68fbe837aa507f6fc6fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,6 +2,7 @@
 # By Nguyen Anh Quynh, 2016
 
 cmake_minimum_required(VERSION 2.8.7)
+project(keystone)
 
 set(KEYSTONE_VERSION_MAJOR 0)
 set(KEYSTONE_VERSION_MINOR 9)
@@ -46,6 +47,30 @@ else()
     add_subdirectory(kstool)
 endif()
 
+# generate and install pkg-config.pc
+FIND_PACKAGE(PkgConfig)
+SET(PKG_CONFIG_FILE_PATH
+    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
+)
+SET(PKG_CONFIG_LIBDIR
+    "${CMAKE_INSTALL_PREFIX}/lib"
+)
+SET(PKG_CONFIG_INCLUDEDIR
+    "${CMAKE_INSTALL_PREFIX}/include"
+)
+SET(PKG_CONFIG_LIBS
+    "-L\${libdir} -lkeystone"
+)
+SET(PKG_CONFIG_CFLAGS
+    "-I\${includedir}"
+)
+CONFIGURE_FILE(
+    "${CMAKE_CURRENT_SOURCE_DIR}/pkg-config.pc.cmake"
+    "${PKG_CONFIG_FILE_PATH}"
+)
+INSTALL(FILES "${PKG_CONFIG_FILE_PATH}"
+        DESTINATION lib/pkgconfig)
+
 # uninstall target
 configure_file(
     "${CMAKE_CURRENT_SOURCE_DIR}/CMakeUninstall.in"
diff --git a/pkg-config.pc.cmake b/pkg-config.pc.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..20f6992d86ce09ac8c2506cfb874532727001632
--- /dev/null
+++ b/pkg-config.pc.cmake
@@ -0,0 +1,7 @@
+Name: ${PROJECT_NAME}
+Description: Keystone assembler engine
+Version: ${KEYSTONE_VERSION_MAJOR}.${KEYSTONE_VERSION_MINOR}
+libdir=${PKG_CONFIG_LIBDIR}
+includedir=${PKG_CONFIG_INCLUDEDIR}
+Libs: ${PKG_CONFIG_LIBS}
+Cflags: ${PKG_CONFIG_CFLAGS}