cmake_minimum_required(VERSION 2.8.4) project(ble_toys) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED OFF) set(Boost_USE_STATIC_RUNTIME OFF) add_definitions(-DBOOST_ALL_DYN_LINK) find_package(Boost COMPONENTS system log thread REQUIRED) set(SOURCE_FILES "${SOURCE_FILES}" Bluetooth.cpp LinuxBluetooth.cpp ByteBuffer.cpp) add_library(ble ${SOURCE_FILES}) add_executable(ble_toys main.cpp) target_link_libraries(ble_toys bluetooth) target_link_libraries(ble_toys pthread) target_link_libraries(ble_toys ${Boost_LIBRARIES}) target_link_libraries(ble_toys ble) enable_testing() find_package(Boost COMPONENTS unit_test_framework REQUIRED) file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} test/*.cpp) foreach(testSrc ${TEST_SRCS}) #Extract the filename without an extension (NAME_WE) get_filename_component(testName ${testSrc} NAME_WE) #Add compile target add_executable(${testName} ${testSrc}) include_directories(${PROJECT_SOURCE_DIR}) #link to Boost libraries AND your targets and dependencies target_link_libraries(${testName} ${Boost_LIBRARIES}) target_link_libraries(${testName} ble) #I like to move testing binaries into a testBin directory set_target_properties(${testName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) #Finally add it to test execution - #Notice the WORKING_DIRECTORY and COMMAND add_test(NAME ${testName} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test COMMAND ${CMAKE_BINARY_DIR}/test/${testName} ) endforeach(testSrc)