cmake_minimum_required(VERSION 3.13) project(sync C) set(CMAKE_C_STANDARD 99) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) include_directories(include) # ---- Source Library (exclude main.c) ---- file(GLOB SYNC_LIB_SRC src/*.c) list(REMOVE_ITEM SYNC_LIB_SRC "${CMAKE_SOURCE_DIR}/src/main.c") add_library(sync_lib STATIC ${SYNC_LIB_SRC}) # ---- sync executable ---- add_executable(sync src/main.c) target_link_libraries(sync PRIVATE sync_lib) # ---- Tests ---- file(GLOB TEST_FILES test/test_*.c) foreach(TEST_FILE ${TEST_FILES}) get_filename_component(TEST_NAME ${TEST_FILE} NAME_WE) add_executable(${TEST_NAME} ${TEST_FILE}) target_link_libraries(${TEST_NAME} PRIVATE sync_lib) target_include_directories(${TEST_NAME} PRIVATE include) endforeach()