cmake_minimum_required(VERSION 3.16) project(BareCode VERSION 1.2.0 DESCRIPTION "A modular code editor built with Qt6" LANGUAGES CXX ) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) # --------------------------------------------------------------------------- # Plattform-Erkennung # --------------------------------------------------------------------------- if(WIN32) set(PLATFORM_WINDOWS TRUE) add_compile_definitions(PLATFORM_WINDOWS) set(CMAKE_WIN32_EXECUTABLE ON) elseif(CMAKE_SYSTEM_NAME STREQUAL "Haiku") set(PLATFORM_HAIKU TRUE) add_compile_definitions(PLATFORM_HAIKU) elseif(APPLE) set(PLATFORM_MACOS TRUE) add_compile_definitions(PLATFORM_MACOS) elseif(UNIX) set(PLATFORM_LINUX TRUE) add_compile_definitions(PLATFORM_LINUX) endif() # --------------------------------------------------------------------------- # Qt6 # --------------------------------------------------------------------------- find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Concurrent) qt_standard_project_setup() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") add_subdirectory(src) # --------------------------------------------------------------------------- # Übersetzungen — lrelease → .qm → ins Build-Verzeichnis # --------------------------------------------------------------------------- find_program(LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt6 HINTS "${Qt6_DIR}/../../../bin" REQUIRED ) set(TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/translations/barecode_de.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/barecode_en.ts ) set(QM_FILES) foreach(TS_FILE ${TS_FILES}) get_filename_component(TS_NAME ${TS_FILE} NAME_WE) set(QM_FILE "${CMAKE_CURRENT_BINARY_DIR}/translations/${TS_NAME}.qm") add_custom_command( OUTPUT "${QM_FILE}" COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/translations" COMMAND ${LRELEASE_EXECUTABLE} "${TS_FILE}" -qm "${QM_FILE}" DEPENDS "${TS_FILE}" COMMENT "lrelease: ${TS_NAME}.qm" VERBATIM ) list(APPEND QM_FILES "${QM_FILE}") endforeach() add_custom_target(BareCode_translations ALL DEPENDS ${QM_FILES}) # --------------------------------------------------------------------------- # Resources # --------------------------------------------------------------------------- qt_add_resources(BARECODE_RESOURCES resources/resources.qrc) # --------------------------------------------------------------------------- # Executable # --------------------------------------------------------------------------- if(PLATFORM_WINDOWS) qt_add_executable(BareCode main.cpp BareCode.rc ${BARECODE_RESOURCES}) else() qt_add_executable(BareCode main.cpp ${BARECODE_RESOURCES}) endif() add_dependencies(BareCode BareCode_translations) target_link_libraries(BareCode PRIVATE BareCode_Core BareCode_Editor BareCode_FileTree BareCode_Highlighter Qt6::Core Qt6::Gui Qt6::Widgets ) target_include_directories(BareCode PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) # --------------------------------------------------------------------------- # Installation # --------------------------------------------------------------------------- include(GNUInstallDirs) install(TARGETS BareCode RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/barecode ) # .qm-Dateien installieren install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/BareCode/translations ) if(PLATFORM_LINUX) foreach(SIZE 16 32 48 64 128 256 512) install(FILES resources/icon_${SIZE}.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME barecode.png ) endforeach() install(FILES BareCode.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) endif() if(PLATFORM_HAIKU) install(FILES resources/icon_256.png DESTINATION ${CMAKE_INSTALL_DATADIR}/BareCode RENAME BareCode.png ) install(CODE " execute_process( COMMAND mimeset -f \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_BINDIR}/BareCode\" RESULT_VARIABLE _mimeset_result ) if(NOT _mimeset_result EQUAL 0) message(WARNING \"mimeset konnte nicht ausgeführt werden.\") endif() ") endif() if(PLATFORM_MACOS) set_target_properties(BareCode PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "BareCode" MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} ) endif()