From a2d3eda4e98524e0d407aa4af06184a7d718a5fb Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 10 Jun 2026 13:14:34 +0200 Subject: [PATCH] Migrate build system to CMake for cross-platform support --- CMakeLists.txt | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ build.bat | 9 ++++++ build.sh | 13 ++++++++ 3 files changed, 104 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 build.bat create mode 100644 build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4067729 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.16) +project(BudgetPro VERSION 1.0 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Qt 6 Configuration +find_package(Qt6 REQUIRED COMPONENTS Widgets Sql) + +# Define directories for easier management +set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(SRC_DIR ${SOURCE_DIR}/src) +set(GUI_DIR ${SOURCE_DIR}/src/gui) +set(WIDGET_DIR ${SOURCE_DIR}/src/gui/widgets) +set(FORMS_DIR ${SOURCE_DIR}/src/gui/forms) +set(MODELS_DIR ${SOURCE_DIR}/src/models) +set(DAO_DIR ${SOURCE_DIR}/src/dao) +set(UTILS_DIR ${SOURCE_DIR}/src/utils) +set(APP_DIR ${SOURCE_DIR}/src/app) +set(ROOT_WIDGET_DIR ${SOURCE_DIR}/widget) + +# Include Paths +include_directories( + ${GUI_DIR} + ${WIDGET_DIR} + ${FORMS_DIR} + ${MODELS_DIR} + ${DAO_DIR} + ${UTILS_DIR} + ${APP_DIR} + ${ROOT_WIDGET_DIR} + ${SOURCE_DIR}/data + ${SOURCE_DIR}/gui/SARibbon + ${SOURCE_DIR}/gui/qtRibbonGUI +) + +# SARibbon Library Integration +# Assuming SARibbon is integrated as a sub-project or pre-compiled +add_subdirectory(gui/SARibbon) + +# Collect Sources +file(GLOB_RECURSIVE SOURCES + "src/*.cpp" + "src/*.h" + "widget/*.cpp" + "widget/*.h" + "utils/*.cpp" + "utils/*.h" +) + +# Collect Forms +file(GLOB_RECURSIVE FORMS + "src/gui/*.ui" + "src/gui/forms/*.ui" + "widget/*.ui" +) + +# Collect Resources +file(GLOB_RECURSIVE RESOURCES + "resources/*.qss" + "resources/*.svg" + "resources/*.png" + "*.qrc" +) + +# Create Executable +add_executable(BudgetPro + ${SOURCES} + ${FORMS} + ${RESOURCES} +) + +# Link Libraries +target_link_libraries(BudgetPro PRIVATE Qt6::Widgets Qt6::Sql SARibbonBar) + +# OS Specific configurations +if(WIN32) + set_target_properties(BudgetPro PROPERTIES WIN32_EXECUTABLE TRUE) + target_compile_definitions(BudgetPro PRIVATE NOMINMAX) +elseif(APPLE) + set_target_properties(BudgetPro PROPERTIES MACOSX_BUNDLE TRUE) +endif() diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..da43954 --- /dev/null +++ b/build.bat @@ -0,0 +1,9 @@ +@echo off +:: Build script for Windows +set BUILD_DIR=build +if not exist %BUILD_DIR% mkdir %BUILD_DIR% +cd %BUILD_DIR% +cmake .. +cmake --build . --config Release +cd .. +echo Build complete. Binary located in %BUILD_DIR%\Release\BudgetPro.exe diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..7f584e0 --- /dev/null +++ b/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# Build script for Linux and macOS +BUILD_DIR="build" + +if [ ! -d "$BUILD_DIR" ]; then + mkdir $BUILD_DIR +fi + +cd $BUILD_DIR +cmake .. +make -j$(nproc) +cd .. +echo "Build complete. Binary located in $BUILD_DIR/BudgetPro"