From 965523e1ff8a7527ca8841ce24eb050f3e4bba48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=ADa=20Morales?= Date: Fri, 21 Nov 2025 03:01:26 +0300 Subject: [PATCH] Update build.cmake --- cpp/cmake/build.cmake | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/cpp/cmake/build.cmake b/cpp/cmake/build.cmake index 3eb2eddd..620d1e84 100644 --- a/cpp/cmake/build.cmake +++ b/cpp/cmake/build.cmake @@ -1,9 +1,33 @@ +# 1. Varsayılan Build Type Ayarı (Standart ve Güvenli) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) + message(STATUS "No build type selected, defaulting to Release") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) + # Standart tipleri GUI (ccmake/cmake-gui) için öneri olarak belirle + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "RelWithAssert") endif() + message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") +# 2. 🚀 SMART CONFIGURATION: 'RelWithAssert' Tanımlaması +# if bloğu içinde manuel eklemek yerine, CMake'e bu tipin kurallarını öğretiyoruz. +# Bu değişkenler sadece CMAKE_BUILD_TYPE=RelWithAssert olduğunda otomatik devreye girer. + +# C++ Flags: -O3 (Optimizasyon) ve -g (Debug sembolleri - assert hatası aldığınızda stack trace görebilmek için iyidir) +# DİKKAT: -DNDEBUG bilerek EKLENMEMİŞTİR. Böylece assert() çalışmaya devam eder. +set(CMAKE_CXX_FLAGS_RELWITHASSERT "-O3 -g" CACHE STRING "Flags used by the C++ compiler during RelWithAssert builds." FORCE) +set(CMAKE_C_FLAGS_RELWITHASSERT "-O3 -g" CACHE STRING "Flags used by the C compiler during RelWithAssert builds." FORCE) +set(CMAKE_EXE_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used for linking binaries during RelWithAssert builds." FORCE) +set(CMAKE_SHARED_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used by the shared libraries linker during RelWithAssert builds." FORCE) + +# 3. Multi-Config Generator Desteği (VS, Xcode, Ninja Multi-Config) +# IDE'de "Debug" ve "Release" yanında "RelWithAssert" seçeneğinin çıkmasını sağlar. +if(CMAKE_CONFIGURATION_TYPES) + list(APPEND CMAKE_CONFIGURATION_TYPES RelWithAssert) + list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "Semicolon separated list of supported configuration types." FORCE) +endif() + +# 4. Doğrulama (Opsiyonel ama Zeki Kodlayıcılar Kontrol Eder) if(CMAKE_BUILD_TYPE STREQUAL "RelWithAssert") - add_compile_options(-O3) - remove_definitions(-DNDEBUG) -endif() \ No newline at end of file + message(STATUS ">>> RelWithAssert Active: Optimizations ON (-O3), Assertions ENABLED (No -DNDEBUG)") +endif()