cmake_minimum_required(VERSION 3.30) project(DCFG C) set(CMAKE_C_STANDARD 23) # Would've done C99 but I need typeof (for now) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON) option(DCFG_BUILD_STATIC "Build DCFG as a static library" OFF) option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON) find_package(Threads) set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) if(DCFG_BUILD_SHARED) add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c) target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR}) if(DCFG_PTHREAD_SUPPORT) find_package(Threads REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) target_compile_definitions(${PROJECT_NAME} PRIVATE DCFG_PTHREAD_SUPPORT) endif() set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg") install(TARGETS ${PROJECT_NAME} DESTINATION lib) endif() if(DCFG_BUILD_STATIC) add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c) target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR}) if(DCFG_PTHREAD_SUPPORT) find_package(Threads REQUIRED) target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads) target_compile_definitions(${PROJECT_NAME}_static PRIVATE DCFG_PTHREAD_SUPPORT) endif() set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg") install(TARGETS ${PROJECT_NAME}_static DESTINATION lib) endif() install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include) if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /W4 /permissive-) else() target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof) endif()