view CmakeLists.txt @ 1:0b3630a29ad8

Initial version based on previous repository. Project was ported to QT6 and in now cmake based.
author Ideenmodellierer <tiefenrauscher@web.de>
date Thu, 27 Nov 2025 18:40:28 +0100
parents
children e30f00f760d3
line wrap: on
line source

cmake_minimum_required(VERSION 3.21)

project(OSTCCompanion VERSION 1.0 LANGUAGES CXX)

project(OSTCCompanion LANGUAGES CXX)

# ----------------------------------------
# C++ Standard
# ----------------------------------------
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# ----------------------------------------
# Qt6 Modules
# ----------------------------------------
find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Widgets
    Network
    Svg
    Xml
    SerialPort
    LinguistTools
)


# ----------------------------------------
# Sources, Header, UI and Ressources
# ----------------------------------------
set(SOURCES
    main.cpp
    AES/rijndael.cpp
    editlogdialog.cpp
    Utils/Exception.cpp
    Utils/Log.cpp
    Utils/LogAppender.cpp
    Utils/LogConsole.cpp
    Utils/LogFile.cpp
    Utils/ProgressEvent.cpp
    MainWindow.cpp
    Serial.cpp
    HexFile.cpp
    SettingsDialog.cpp
    HardwareOperations.cpp
    OSTCFrogOperations.cpp
    OSTCSportOperations.cpp
    OSTC2cOperations.cpp
    OSTC2Operations.cpp
    OSTC3Operations.cpp
    OSTC3pOperations.cpp
    OSTC4Operations.cpp
    OSTC_CR_Operations.cpp
)

set(HEADERS
    AES/rijndael.h
    AES/Adler16.h
    Utils/Exception.h
    Utils/Log.h
    Utils/LogAppender.h
    Utils/LogConsole.h
    Utils/LogFile.h
    Utils/ProgressEvent.h
    MainWindow.h
    Serial.h
    HexFile.h
    SettingsDialog.h
    HardwareOperations.h
    OSTCFrogOperations.h
    OSTCSportOperations.h
    OSTC2cOperations.h
    OSTC2Operations.h
    OSTC3Operations.h
    OSTC3pOperations.h
    OSTC4Operations.h
    OSTC_CR_Operations.h
    editlogdialog.h
    ui_LogEditor.h
)

set(UIS
    LogEditor.ui
    MainWindow.ui
    Settings.ui
)

set(RESOURCES
    Resources.qrc
    icon.rc
)

set(TRANSLATIONS
    Translations/companion_DE.ts
    Translations/companion_FR.ts
    Translations/companion_ES.ts
    Translations/companion_IT.ts
    Translations/companion_RU.ts
)

set(app_icon_resource_windows "${CMAKE_CURRENT_SOURCE_DIR}/icon.rc")

# ----------------------------------------
# Executable erstellen
# ----------------------------------------
qt_add_executable(${PROJECT_NAME}
    ${SOURCES}
    ${HEADERS}
    ${UIS}
    ${RESOURCES}
    Utils/Export.h
    ${app_icon_resource_windows}
)

target_include_directories(${PROJECT_NAME} PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}       # Root
    ${CMAKE_CURRENT_SOURCE_DIR}/Utils
    ${CMAKE_CURRENT_SOURCE_DIR}/AES
)

# ----------------------------------------
# Qt Libraries verlinken
# ----------------------------------------
target_link_libraries(${PROJECT_NAME}
    PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network Qt6::Svg Qt6::Xml Qt6::SerialPort
)

# ----------------------------------------
# Plattform-spezifische Anpassungen
# ----------------------------------------
if(WIN32)
    target_compile_definitions(${PROJECT_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS=1 BUILDING_OSTC_COMPANION)
elseif(APPLE)
    target_compile_options(${PROJECT_NAME} PRIVATE -std=c++11 -Wno-inconsistent-missing-override)
elseif(UNIX)
    target_compile_options(${PROJECT_NAME} PRIVATE -std=c++11)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        BUILD_RPATH "\$ORIGIN/lib"
    )
endif()

# ----------------------------------------
# Debug/Release-Builds
# ----------------------------------------
if(CMAKE_BUILD_TYPE MATCHES Debug)
    target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG=1)
endif()

# ----------------------------------------
# Version aus Datei einlesen (optional)
# ----------------------------------------
file(STRINGS "${CMAKE_SOURCE_DIR}/VERSION.txt" VERSION_CONTENT)
string(REGEX MATCH "MAJOR=([0-9]+)" _ ${VERSION_CONTENT})
set(MAJOR_VERSION ${CMAKE_MATCH_1})
string(REGEX MATCH "MINOR=([0-9]+)" _ ${VERSION_CONTENT})
set(MINOR_VERSION ${CMAKE_MATCH_1})
string(REGEX MATCH "PATCH=([0-9]+)" _ ${VERSION_CONTENT})
set(PATCH_VERSION ${CMAKE_MATCH_1})
string(REGEX MATCH "BETA=([0-9]+)" _ ${VERSION_CONTENT})
set(BETA_VERSION ${CMAKE_MATCH_1})


message("MAJOR_VERSION = '${MAJOR_VERSION}'")

target_compile_definitions(${PROJECT_NAME} PRIVATE
    MAJOR_VERSION=${MAJOR_VERSION}
    MINOR_VERSION=${MINOR_VERSION}
    PATCH_VERSION=${PATCH_VERSION}
    BETA_VERSION=${BETA_VERSION}
)

# Show folder in Qt Creator
file(GLOB ICON_FILES "${CMAKE_SOURCE_DIR}/Images/*")
add_custom_target(Resources ALL SOURCES ${ICON_FILES})


qt6_add_translation(QM_FILES ${TRANSLATIONS})

if(CMAKE_BUILD_TYPE MATCHES Release)
    target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG=1)

    message("Build release and installer")

    set(CPACK_IFW_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/Images/inst_OSTC_Companion.ico")

    install(FILES ${CMAKE_SOURCE_DIR}/Images/app_OSTC_Companion.ico
            DESTINATION .          # relativ zum Package root
            COMPONENT Core)

    install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin COMPONENT Core)

    qt_generate_deploy_app_script(
        TARGET ${PROJECT_NAME}
        OUTPUT_SCRIPT deploy_script
        NO_UNSUPPORTED_PLATFORM_ERROR
    )

    install(SCRIPT ${deploy_script}
        COMPONENT Core)

    # CPack IFW Konfiguration
    set(CPACK_GENERATOR "IFW")
    set(CPACK_IFW_ROOT "D:/Programme/QT/Tools/QtInstallerFramework/4.10")
    set(CPACK_PACKAGE_VERSION_MAJOR "3")
    set(CPACK_PACKAGE_VERSION_MINOR "3")
    set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
    set(CPACK_PACKAGE_VENDOR "Heinrichs Weikamp")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OSTC Companion Application")
    set (CPACK_IFW_PACKAGE_NAME "${PROJECT_NAME} 3.3.1")
    set (CPACK_IFW_PACKAGE_TITLE "${PROJECT_NAME} Installer")
    set (CPACK_IFW_PACKAGE_PUBLISHER "Heinrichs Weikamp")
    set (CPACK_IFW_PACKAGE_WIZARD_STYLE "Modern")
    set (CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST OFF)

    set (CPACK_IFW_PACKAGE_START_MENU_DIRECTORY "OSTC-Tools")

    include(CPack)
    include(CPackIFW)

    # Hauptkomponente
    cpack_add_component(Core
        DISPLAY_NAME "OSTC Companion"
        DESCRIPTION "OSTC maintenance application"
        REQUIRED
    )

    cpack_ifw_configure_component(Core ESSENTIAL FORCED_INSTALLATION)
endif()