Last active
February 29, 2024 11:53
-
-
Save MichaelHeiser/22f9bfc71d007f6a45d2f77884c9432c to your computer and use it in GitHub Desktop.
Sample Qt-Application CMakeLists.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| cmake_minimum_required(VERSION 3.21) | |
| project(App_Name VERSION 3.1.1 LANGUAGES CXX) | |
| set(APP_MAIN_VERSION 3) | |
| set(APP_FEAT_VERSION 1) | |
| set(APP_PATCH_VERSION 1) | |
| set(APP_BUILD_VERSION 5) | |
| set(APPLICATION_COPYRIGHT "2015-2023") | |
| set(APPLICATION_NAME "EuroSoft live") | |
| set(ORGANIZATION_DOMAIN "www.systronik.com") | |
| set(ORGANIZATION_NAME "Systronik GmbH") | |
| set(APPLICATION_VERSION "${APP_MAIN_VERSION}.${APP_FEAT_VERSION}.${APP_PATCH_VERSION}.${APP_BUILD_VERSION}") | |
| message("Application version: ${APPLICATION_VERSION}") | |
| set(CMAKE_INCLUDE_CURRENT_DIR ON) | |
| if(ANDROID) | |
| set(QT_ANDROID_APPLICATION_BINARY App_Name) | |
| endif() | |
| set(App_Name_src | |
| main.cpp | |
| App_Name.qrc | |
| ) | |
| qt_add_resources(App_Name_src | |
| ../../libraries/3rdparty/3rdparty.qrc | |
| ) | |
| qt_add_resources(App_Name_src | |
| ../../translations/compiled/EuroSoftProject_translations.qrc | |
| ) | |
| if(MSVC) | |
| enable_language("RC") | |
| configure_file( | |
| "${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in" | |
| "${CMAKE_CURRENT_BINARY_DIR}/version.rc" | |
| @ONLY | |
| ) | |
| qt_add_executable(App_Name MANUAL_FINALIZATION WIN32 | |
| ${App_Name_src} | |
| ${CMAKE_CURRENT_SOURCE_DIR}/windows/icon.rc | |
| ${CMAKE_CURRENT_BINARY_DIR}/version.rc | |
| ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/EuroSoft/Win10Compatibility.manifest | |
| ) | |
| elseif(ANDROID) | |
| set(APP_MIN_SDK 26) | |
| set(QT_ANDROID_MIN_SDK_VERSION CACHE INTERNAL ${APP_MIN_SDK}) | |
| set(QT_ANDROID_TARGET_SDK_VERSION CACHE INTERNAL 33) | |
| set(ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android CACHE INTERNAL "") | |
| set(QT_ANDROID_APP_NAME CACHE INTERNAL "${APPLICATION_NAME}") | |
| set(QT_ANDROID_VERSION_CODE "${APP_MIN_SDK}20${APP_MAIN_VERSION}${APP_FEAT_VERSION}${APP_PATCH_VERSION}0${APP_BUILD_VERSION}") | |
| message("Android version code: ${QT_ANDROID_VERSION_CODE}") | |
| set(QT_ANDROID_VERSION_NAME "${APPLICATION_VERSION}") | |
| if(Qt${QT_VERSION_MAJOR} STREQUAL Qt5) | |
| file(GLOB_RECURSE ANDROID_SOURCES | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/AndroidManifest.xml | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/build.gradle | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle.properties | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.jar | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.properties | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradlew | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/res/values/libs.xml | |
| ${QT_ANDROID_PACKAGE_SOURCE_DIR}/src/*.java | |
| ) | |
| add_library(App_Name SHARED | |
| ${App_Name_src} | |
| ${ANDROID_SOURCES}) | |
| else() | |
| qt_add_executable(App_Name MANUAL_FINALIZATION ${App_Name_src}) | |
| set_property(TARGET App_Name APPEND PROPERTY QT_ANDROID_MIN_SDK_VERSION ${QT_ANDROID_MIN_SDK_VERSION}) | |
| set_property(TARGET App_Name APPEND PROPERTY QT_ANDROID_TARGET_SDK_VERSION ${QT_ANDROID_TARGET_SDK_VERSION}) | |
| set_property(TARGET App_Name APPEND PROPERTY QT_ANDROID_VERSION_CODE ${QT_ANDROID_VERSION_CODE}) | |
| set_property(TARGET App_Name APPEND PROPERTY QT_ANDROID_VERSION_NAME ${QT_ANDROID_VERSION_NAME}) | |
| set_target_properties(App_Name PROPERTIES | |
| QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android" | |
| ) | |
| endif() | |
| add_custom_command( | |
| TARGET App_Name PRE_LINK | |
| COMMAND ${CMAKE_COMMAND} -E copy_directory | |
| ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/EuroSoft/nativetools/platforms/android | |
| ${CMAKE_CURRENT_SOURCE_DIR}/android/src/com/systronik/platforms/android) | |
| #print_all_variables() | |
| elseif(IOS) | |
| qt_add_executable(App_Name MANUAL_FINALIZATION ${App_Name_src}) | |
| # Asset catalog root | |
| set(asset_catalog_path "${CMAKE_CURRENT_SOURCE_DIR}/../../images/icons/ios/App_Name.xcassets") | |
| target_sources(App_Name PRIVATE "${asset_catalog_path}") | |
| set_source_files_properties(${asset_catalog_path} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) | |
| # Asset catalog app icon set | |
| list(APPEND app_icon_set "${asset_catalog_path}/AppIcon.appiconset") | |
| set_source_files_properties(${app_icon_set} PROPERTIES | |
| MACOSX_PACKAGE_LOCATION Resources/App_Name.xcassets | |
| ) | |
| # Asset catalog icon files | |
| file(GLOB_RECURSE app_icon_files CONFIGURE_DEPENDS "${asset_catalog_path}/AppIcon.appiconset/*.png") | |
| list(APPEND app_icon_files "${asset_catalog_path}/AppIcon.appiconset/Contents.json") | |
| set_source_files_properties(${app_icon_files} PROPERTIES | |
| MACOSX_PACKAGE_LOCATION Resources/App_Name.xcassets/AppIcon.appiconset | |
| ) | |
| set_target_properties(App_Name PROPERTIES | |
| MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ios/Info.plist" | |
| QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/../../images/launch/ios/App_Name.storyboard" | |
| BUILD_WITH_INSTALL_RPATH YES | |
| XCODE_ATTRIBUTE_SKIP_INSTALL NO | |
| XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)" | |
| XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY 1,2 | |
| XCODE_ATTRIBUTE_VALIDATE_PRODUCT[variant=Release] YES | |
| XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon | |
| XCODE_ATTRIBUTE_INFOPLIST_KEY_NSHumanReadableCopyright "(c)2023 SYSTRONIK GmbH" | |
| XCODE_ATTRIBUTE_INFOPLIST_KEY_UILaunchStoryboardName LaunchScreen | |
| XCODE_ATTRIBUTE_INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad | |
| "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight" | |
| XCODE_ATTRIBUTE_INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone | |
| "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight" | |
| ) | |
| endif() | |
| target_include_directories(App_Name PRIVATE | |
| ${3rdparty_includeDirs} | |
| ) | |
| target_compile_definitions(App_Name PRIVATE | |
| DISABLE_LIBRARY_FEATURES | |
| EXTERNAL_COMPILER | |
| NCREPORT_IMPORT | |
| NCREPORT_NO_QPRINTER | |
| QT_DISABLE_DEPRECATED_BEFORE=0x050F00 | |
| APPLICATION_COPYRIGHT="${APPLICATION_COPYRIGHT}" | |
| APPLICATION_NAME="${APPLICATION_NAME}" | |
| ORGANIZATION_DOMAIN="${ORGANIZATION_DOMAIN}" | |
| ORGANIZATION_NAME="${ORGANIZATION_NAME}" | |
| APPLICATION_VERSION="${APPLICATION_VERSION}" | |
| ) | |
| set(qzxing_target App_Name) | |
| include(${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/QZXing/qzxing.cmake) | |
| target_link_libraries(App_Name PRIVATE | |
| Qt::Bluetooth | |
| Qt::Charts | |
| Qt::Concurrent | |
| Qt::Core | |
| Qt::Gui | |
| Qt::Multimedia | |
| Qt::Network | |
| Qt::Qml | |
| Qt::Quick | |
| Qt::QuickControls2 | |
| Qt::Sql | |
| Qt::WebSockets | |
| Qt::Widgets | |
| Qt::Xml | |
| Qt::Core5Compat | |
| ) | |
| if(QT_VERSION_MAJOR EQUAL 5) | |
| target_link_libraries(App_Name PUBLIC Qt::Script) | |
| endif() | |
| if(CMAKE_BUILD_TYPE STREQUAL Release) | |
| target_compile_definitions(App_Name PRIVATE | |
| QT_NO_DEBUG_OUTPUT | |
| ) | |
| endif() | |
| if(NOT MACOS) | |
| set_target_properties(App_Name PROPERTIES | |
| MACOSX_BUNDLE FALSE | |
| ) | |
| endif() | |
| if(MSVC) | |
| target_compile_definitions(App_Name PRIVATE | |
| MP | |
| ) | |
| target_link_libraries(App_Name PRIVATE | |
| Qt::PrintSupport | |
| Qt::WebChannel | |
| SetupAPI | |
| hid | |
| user32 | |
| opengl32.lib | |
| ) | |
| endif() | |
| if(ANDROID) | |
| target_link_directories(App_Name PRIVATE ${QATERIAL_ROOT_PATH}/install/android_${ANDROID_ABI}/${CMAKE_BUILD_TYPE}/lib) | |
| target_link_libraries(App_Name PRIVATE | |
| Qt::WebChannel | |
| Qt::PrintSupport | |
| EGL | |
| GLESv2 | |
| ) | |
| list(APPEND CUSTOM_ANDROID_EXTRA_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/android_${ANDROID_ABI}/libNCReport${LIB_SUFFIX}_${ANDROID_ABI}.so) | |
| list(APPEND CUSTOM_ANDROID_EXTRA_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/android_${ANDROID_ABI}/libzint${LIB_SUFFIX}_${ANDROID_ABI}.so) | |
| list(REMOVE_DUPLICATES CUSTOM_ANDROID_EXTRA_LIBS) | |
| string(REPLACE ";" "," CUSTOM_ANDROID_EXTRA_LIBS_STRING "${CUSTOM_ANDROID_EXTRA_LIBS}") | |
| if(QT_VERSION_MAJOR EQUAL 5) | |
| target_link_libraries(App_Name PUBLIC | |
| Qt::AndroidExtras | |
| ) | |
| set(ANDROID_EXTRA_LIBS "${CUSTOM_ANDROID_EXTRA_LIBS_STRING}" CACHE INTERNAL "") | |
| endif() | |
| if(QT_VERSION_MAJOR EQUAL 6) | |
| set_target_properties(App_Name PROPERTIES | |
| QT_ANDROID_EXTRA_LIBS | |
| "${CUSTOM_ANDROID_EXTRA_LIBS_STRING}" | |
| ) | |
| target_link_libraries(App_Name PUBLIC | |
| Qt::CorePrivate | |
| ) | |
| endif() | |
| endif() | |
| if(IOS) | |
| target_compile_definitions(App_Name PUBLIC | |
| QT_NO_PRINTER | |
| ) | |
| qt_import_plugins(App_Name INCLUDE Qt::QIosOptionalPlugin_NSPhotoLibraryPlugin) | |
| if(QT_VERSION_MAJOR EQUAL 6) | |
| target_link_libraries(EuroSoft PRIVATE | |
| $<LINK_LIBRARY:FRAMEWORK,UIKit> | |
| ) | |
| endif() | |
| endif() | |
| if(MACOS) | |
| target_compile_definitions(App_Name PRIVATE | |
| QT_NO_PRINTER | |
| ) | |
| target_link_libraries(App_Name PRIVATE | |
| "-framework NCReport" | |
| zint | |
| ) | |
| endif() | |
| if(MACOS OR MSVC) | |
| target_link_libraries(App_Name PRIVATE | |
| Qt::SerialPort | |
| ) | |
| endif() | |
| if(MSVC) | |
| endif() | |
| set_target_properties(App_Name PROPERTIES | |
| MACOSX_BUNDLE_GUI_IDENTIFIER "com.systronik.EuroSoft-live" | |
| MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}" | |
| MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" | |
| MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ios/Info.plist" | |
| MACOSX_BUNDLE TRUE | |
| WIN32_EXECUTABLE TRUE | |
| ) | |
| target_compile_definitions(App_Name | |
| PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>) | |
| install(TARGETS App_Name | |
| BUNDLE DESTINATION . | |
| RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | |
| LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | |
| ) | |
| qt_import_qml_plugins(App_Name) | |
| qt_finalize_executable(App_Name) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Michael,
does this work for you to set the Orientations as XCODE_ATTRIBUTE ?
From my experiences it doesn't work. It's listed under build settings, but the checkboxes on General Tab aren't syncchronized. Have set iPhone to LandscapeLeft and Right only and tried running on device in Xcode and all orientations are working. Doing the same directly in info.plist it's working. of course would be cool to do this as XCODE_ATTRIBUTE in CmakeLists.txt. (Had already asked at Qt Discord Server ;-)