cmake_minimum_required(VERSION 3.16) project(miniboinc VERSION 0.1.0 LANGUAGES C ) set(CMAKE_C_STANDARD 23) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) find_package(Threads REQUIRED) # --------------------------------------------------------- # Output directories # --------------------------------------------------------- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) foreach(OUTPUTCONFIG DEBUG RELEASE RELWITHDEBINFO MINSIZEREL) string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG_UPPER) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib) endforeach() # Common file(GLOB_RECURSE COMMON_SRC CONFIGURE_DEPENDS src/common/*.c) add_library(common STATIC ${COMMON_SRC}) target_link_libraries(common PUBLIC ${CMAKE_THREAD_LIBS_INIT}) target_compile_options(common PRIVATE -Wall -Wextra -Wpedantic -g ) target_include_directories(common PUBLIC ${PROJECT_SOURCE_DIR}/include ) # Client file(GLOB_RECURSE CLIENT_SRC CONFIGURE_DEPENDS src/client/*.c) add_executable(client ${CLIENT_SRC}) target_link_libraries(client PRIVATE common ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(client PRIVATE ${PROJECT_SOURCE_DIR}/include ) target_compile_options(client PRIVATE -Wall -Wextra -Wpedantic -g ) set_target_properties(client PROPERTIES OUTPUT_NAME "miniboinc_client") # Server file(GLOB_RECURSE SERVER_SRC CONFIGURE_DEPENDS src/server/*.c) add_executable(server ${SERVER_SRC}) target_link_libraries(server PRIVATE common ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(server PRIVATE ${PROJECT_SOURCE_DIR}/include ) target_compile_options(server PRIVATE -Wall -Wextra -Wpedantic -g ) target_compile_definitions(server PRIVATE) set_target_properties(server PROPERTIES OUTPUT_NAME "miniboinc_server")