cmake_minimum_required(VERSION 3.14) project(cards) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Find required packages find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) # Find PostgreSQL (libpqxx) pkg_check_modules(PQXX REQUIRED libpqxx>=7.0.0) pkg_check_modules(PQ REQUIRED libpq) # Find Boost find_package(Boost REQUIRED COMPONENTS system) # Find nlohmann_json find_package(nlohmann_json REQUIRED) # Add executable add_executable(cards src/main.cpp src/database.cpp src/server.cpp ) # Include directories target_include_directories(cards PRIVATE ${Boost_INCLUDE_DIRS} ${PQXX_INCLUDE_DIRS} ${PQ_INCLUDE_DIRS} src ) # Link libraries target_link_libraries(cards ${Boost_LIBRARIES} ${PQXX_LIBRARIES} ${PQ_LIBRARIES} Threads::Threads nlohmann_json::nlohmann_json ) # For Windows, add ws2_32 and crypt32 if(WIN32) target_link_libraries(cards ws2_32 crypt32) endif() # Compiler flags target_compile_definitions(cards PRIVATE BOOST_ALL_NO_LIB) # Set properties set_target_properties(cards PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) # ─── Install ────────────────────────────────────────────────────────── install(TARGETS cards DESTINATION /usr/bin) install(FILES deploy/systemd/cards.service DESTINATION /usr/lib/systemd/system) install(FILES deploy/config/cards.json.example DESTINATION /etc/cards) install(FILES LICENSE DESTINATION /usr/share/doc/cards) # ─── Packaging (CPack) ──────────────────────────────────────────────── set(CPACK_PACKAGE_NAME "cards") set(CPACK_PACKAGE_VERSION "1.0.0") set(CPACK_PACKAGE_VENDOR "cards") set(CPACK_PACKAGE_MAINTAINER "adwet") set(CPACK_PACKAGE_CONTACT "adwet@yandex.ru") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Cards web server") set(CPACK_PACKAGE_DESCRIPTION "A simple C++20 web server powered by Boost.Beast and PostgreSQL") set(CPACK_PACKAGE_SECTION "web") set(CPACK_DEBIAN_PACKAGE_SECTION "web") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_DEBIAN_PACKAGE_DEPENDS "libpqxx-7.10, libpq5 (>= 13), libstdc++6 (>= 10), libgcc-s1, libboost-system1.83.0" ) set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/deploy/deb/postinst" "${CMAKE_SOURCE_DIR}/deploy/deb/prerm" ) set(CPACK_DEBIAN_FILE_NAME "cards-${CPACK_PACKAGE_VERSION}-Linux.deb") set(CPACK_GENERATOR "DEB") include(CPack)