# Файл для подключения в основной проект через include # Настройки компиляции для всего if (DISABLE_HARD_WARNING_ERROR) target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic ) else() target_compile_options(${PROJECT_NAME} PRIVATE -Wall # Все стандартные предупреждения -Wextra # Дополнительные предупреждения -Wpedantic # Соответствие стандарту C++ -Werror # Превратить предупреждения в ошибки -Wconversion # Предупреждения о неявных преобразованиях -Wsign-conversion # Предупреждения о знаковых/беззнаковых преобразованиях -Wshadow # Предупреждения о "тенях" переменных -Wunused # Предупреждения о неиспользуемом коде -Wold-style-cast # Запрет C-style кастов (только static_cast/dynamic_cast/...) -Wnull-dereference # Предупреждения о возможных разыменованиях nullptr -Wdouble-promotion # Предупреждения о неявном преобразовании float → double -Wformat=2 # Строгая проверка printf/scanf ) endif() target_compile_definitions(${PROJECT_NAME} PRIVATE QT_NO_FOREACH QT_NO_URL_CAST_FROM_STRING QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_STRICT_ITERATORS ) find_program(CLANG_TIDY_EXE NAMES "clang-tidy") if (CLANG_TIDY_EXE) set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=*") endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") target_compile_options(${PROJECT_NAME} PRIVATE -fsanitize=address # AddressSanitizer (поиск утечек, выходов за границы) -fsanitize=undefined # UndefinedBehaviorSanitizer (UB-проверки) -fsanitize=leak # LeakSanitizer (поиск утечек памяти) -fno-omit-frame-pointer # Для лучшего стека вызовов в санитайзерах ) target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address -fsanitize=undefined -fsanitize=leak ) endif()