-include_directories(..)
-
-add_library(utilities STATIC utilities.cc)
-link_libraries(utilities memcachedinternal)
-
-add_executable(memcapable memcapable.cc ../libmemcached/byteorder.cc)
-add_executable(memcat memcat.cc)
-add_executable(memcp memcp.cc)
-add_executable(memdump memdump.cc)
-add_executable(memerror memerror.cc)
-add_executable(memexist memexist.cc)
-add_executable(memflush memflush.cc)
-add_executable(memparse memparse.cc)
-add_executable(memping memping.cc)
-add_executable(memrm memrm.cc)
-add_executable(memslap memslap.cc generator.cc execute.cc)
-add_executable(memstat memstat.cc)
-add_executable(memtouch memtouch.cc)
+
+set(CLIENTS
+ memcapable
+ memcat
+ memcp
+ memdump
+ memerror
+ memexist
+ memflush
+ memparse
+ memping
+ memrm
+ memslap
+ memstat
+ memtouch)
+
+add_library(libclient_utilities STATIC utilities.cc)
+add_library(client_utilities ALIAS libclient_utilities)
+target_include_directories(libclient_utilities PRIVATE ..)
+target_link_libraries(libclient_utilities libmemcachedinternal)
+
+add_library(libclient_slap STATIC generator.cc execute.cc)
+add_library(client_slap ALIAS libclient_slap)
+target_include_directories(libclient_slap PRIVATE ..)
+target_link_libraries(libclient_slap libmemcachedinternal)
+
+foreach(CLIENT IN LISTS CLIENTS)
+ add_executable(${CLIENT} ${CLIENT}.cc)
+ target_include_directories(${CLIENT} PRIVATE ..)
+ target_link_libraries(${CLIENT} libclient_utilities)
+endforeach()
+
+# extra sources
+
+target_sources(memcapable PRIVATE ../libmemcached/byteorder.cc)
+
+# extra libs