From 11b117ce9f6979eab7a875ef30248f6dcb60d0a7 Mon Sep 17 00:00:00 2001 From: 1vanK <1vanK@users.noreply.github.com> Date: Thu, 14 Nov 2024 17:41:27 +0300 Subject: [PATCH] Update CMakeLists.txt --- CMakeLists.txt | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56b523a..4226ebf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,8 @@ cmake_minimum_required(VERSION 3.16) # Название проекта project(dv_big_int) -option(BIG_INT_ONLY_LIB "Не компилировать Тестер" OFF) +option(DV_BIG_INT_BUILD_TESTER "Компилировать Тестер" OFF) +option(DV_BIG_INT_UB_SANITIZER "Детектировать undefined behavior" OFF) # Версия стандарта C++ set(CMAKE_CXX_STANDARD 20) @@ -25,18 +26,6 @@ if(MSVC) add_compile_options(/utf-8) endif() -# Выводим больше предупреждений -if(MSVC) - add_compile_options(/W4) -else() - add_compile_options(-Wall -Wextra -Wpedantic) - - if(NOT MINGW) - add_compile_options(-fsanitize=undefined) - add_link_options(-fsanitize=undefined) - endif() -endif() - # Статически линкуем библиотеки, чтобы не копировать dll-ки if(MINGW) add_link_options(-static) @@ -59,12 +48,25 @@ add_library(${target_name} STATIC ${source_files}) # Делаем заголовочные файлы доступными библиотеке и приложениям target_include_directories(${target_name} PUBLIC lib) +# Выводим больше предупреждений +if(MSVC) + target_compile_options(${target_name} PRIVATE /W4) +else() # GCC, Clang или MinGW + target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wpedantic) + + if(NOT MINGW AND DV_BIG_INT_UB_SANITIZER) + target_compile_options(${target_name} PRIVATE -fsanitize=undefined) + # PUBLIC, чтобы не было ошибок при линковке к приложению без опции + target_link_options(${target_name} PUBLIC -fsanitize=undefined) + endif() +endif() + # Заставляем VS отображать дерево каталогов source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${source_files}) # ============================================== Тестер ============================================== -if(NOT BIG_INT_ONLY_LIB) +if(DV_BIG_INT_BUILD_TESTER) # Название таргета set(target_name tester) @@ -77,6 +79,17 @@ if(NOT BIG_INT_ONLY_LIB) # Подключаем библиотеку target_link_libraries(${target_name} PRIVATE dv_big_int) + # Выводим больше предупреждений + if(MSVC) + target_compile_options(${target_name} PRIVATE /W4) + else() # GCC, Clang или MinGW + target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wpedantic) + + if(NOT MINGW AND DV_BIG_INT_UB_SANITIZER) + target_compile_options(${target_name} PRIVATE -fsanitize=undefined) + endif() + endif() + # Отладочная версия приложения будет иметь суффикс _d set_property(TARGET ${target_name} PROPERTY DEBUG_POSTFIX _d)