cmake_minimum_required(VERSION 3.8) project(cc4group) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(${CMAKE_C_COMPILER_ID} MATCHES GNU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wcast-align -Werror") endif() find_package(ZLIB REQUIRED) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") set(CC4GROUP_PLATFORM "windows") else() set(CC4GROUP_PLATFORM "unix") endif() string(TOUPPER ${CC4GROUP_PLATFORM} CC4GROUP_PLATFORM_DEF) set(cc4group_SRC src/cc4group.c src/c4groupheader.c src/c4groupentrycore.c src/platform/${CC4GROUP_PLATFORM}.c ) set(cppc4group_SRC src/cppc4group.cpp ) add_library(cc4group_objs OBJECT ${cc4group_SRC}) set_property(TARGET cc4group_objs PROPERTY POSITION_INDEPENDENT_CODE ON) target_include_directories(cc4group_objs PRIVATE ZLIB::ZLIB) target_compile_definitions(cc4group_objs PRIVATE CC4GROUP_PLATFORM_${CC4GROUP_PLATFORM_DEF}) add_library(cc4group STATIC $) target_link_libraries(cc4group PRIVATE ZLIB::ZLIB) add_library(cppc4group STATIC $ ${cppc4group_SRC}) target_link_libraries(cppc4group PRIVATE ZLIB::ZLIB) set_property(TARGET cppc4group PROPERTY POSITION_INDEPENDENT_CODE ON) add_library(cc4group_dyn SHARED $) target_link_libraries(cc4group_dyn PRIVATE ZLIB::ZLIB) include_directories(src) function(example name) add_executable(${name} examples/${name}.c) target_link_libraries(${name} PRIVATE cc4group) endfunction() example(unc4group) example(c4copy) example(c4info) example(c4ls) example(c4touch) example(c4rm) example(c4mkdir) add_executable(c4cat examples/c4cat.c src/platform/${CC4GROUP_PLATFORM}.c) target_link_libraries(c4cat PRIVATE cc4group) target_compile_definitions(c4cat PRIVATE CC4GROUP_PLATFORM_${CC4GROUP_PLATFORM_DEF}) if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows") add_executable(c4cat_dyn examples/c4cat_dyn.c) target_link_libraries(c4cat_dyn PRIVATE -ldl) endif()