cmake_minimum_required(VERSION "4.2.0") project("cabinet" LANGUAGES CXX VERSION "1.0.0" ) set(CMAKE_CXX_STANDARD "23") set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) include("FetchContent") include("CTest") find_package("PkgConfig") pkg_check_modules("magic" REQUIRED IMPORTED_TARGET GLOBAL "libmagic" ) add_library("core" STATIC) add_library("cabinet::core" ALIAS "core") target_sources("core" PRIVATE "cabinet/magic.cpp" ) target_include_directories("core" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" ) target_link_libraries("core" PUBLIC "PkgConfig::magic" ) add_executable("cabinet") add_executable("cabinet::app" ALIAS "cabinet") target_sources("cabinet" PRIVATE "cabinet/main.cpp" ) target_link_libraries("cabinet" PRIVATE "cabinet::core" ) if(BUILD_TESTING) FetchContent_Declare("Catch2" URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.15.0.tar.gz" URL_HASH "SHA256=9650c55e497759cc39b977e45524bc8acb15256061c112080916ab6cb0b1ea66" EXCLUDE_FROM_ALL FIND_PACKAGE_ARGS "3.15.0" ) FetchContent_MakeAvailable("Catch2") include("Catch") add_compile_definitions("CATCH_CONFIG_NO_COUNTER") add_executable("tests") add_executable("cabinet::tests" ALIAS "tests") target_sources("tests" PRIVATE "cabinet/magic.tests.cpp" ) target_link_libraries("tests" PRIVATE "cabinet::core" "Catch2::Catch2WithMain" ) catch_discover_tests("cabinet::tests") endif()