cmake_minimum_required(VERSION 3.31) project(atm_admin_program) set(CMAKE_CXX_STANDARD 20) add_executable(${CMAKE_PROJECT_NAME} src/main.cpp src/AtmAdmin.cpp src/XmlHandling.cpp libs/XmlHandling.h) find_package(pugixml CONFIG REQUIRED) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE libs) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE pugixml::static pugixml::pugixml) # Check if we're using MinGW or compiling for Windows if(MINGW OR WIN32) # Windows/MinGW specific settings target_compile_options(${PROJECT_NAME} PRIVATE # Make all warnings into errors -Werror # Basic warning flags -Wall # Enable all common warnings -Wextra # Enable extra warnings not covered by -Wall -Wpedantic # Issue warnings demanded by strict ISO C and ISO C++ -pedantic-errors # Like -Wpedantic but errors instead of warnings # Specific warning categories -Wshadow # Warn when a variable declaration shadows another -Wcast-align # Warn for potential performance problems from memory alignment -Wconversion # Warn on type conversions that may lose data -Wsign-conversion # Warn on sign conversions -Wnull-dereference # Warn about null pointer dereference # MinGW/Windows specific flags -static-libgcc # Link libgcc statically -static-libstdc++ # Link libstdc++ statically ) # Windows-specific linker flags target_link_options(${PROJECT_NAME} PRIVATE -static # Create a static executable -Wl,--no-undefined # Don't allow undefined symbols ) # Define Windows macros if needed target_compile_definitions(${PROJECT_NAME} PRIVATE WIN32_LEAN_AND_MEAN # Exclude rarely-used stuff from Windows headers NOMINMAX # Prevent Windows.h from defining min/max macros ) else() # Linux/Unix specific settings target_compile_options(${PROJECT_NAME} PRIVATE # Make all warnings into errors -Werror # Basic warning flags -Wall # Enable all common warnings -Wextra # Enable extra warnings not covered by -Wall -Wpedantic # Issue warnings demanded by strict ISO C and ISO C++ -pedantic-errors # Like -Wpedantic but errors instead of warnings # Specific warning categories -Wshadow # Warn when a variable declaration shadows another -Wcast-align # Warn for potential performance problems from memory alignment -Wconversion # Warn on type conversions that may lose data -Wsign-conversion # Warn on sign conversions -Wnull-dereference # Warn about null pointer dereference ) endif()