Hello experts,
currently trying to move from qmake to cmake. Starting point in my Framework
was using qmake2cmake tool. This generated a bunch of heavy cmake files,
stripped them down and got it working that my integrated internal libs are
building on windows.
I have managed to get building and running working under MSVC. Now I stuck with
Android, my libraries and UI components in applets are building, also the final
shared lib for EuroSoft_live is building but build process stops with following
error:
👎 Fehler: Cannot find application binary in build dir
D:/Projects/QtEuroSoftProjectQt6/build/Android_Qt_5_15_10_Clang_Multi_Abi-Debug/android-build//libs/armeabi-v7a/libEuroSoftProject_armeabi-v7a.so<https://v7a.so/>.
Project structure:
EuroSoftProject
CMakeLists.txt
- applications
CMakeLists.txt
- EuroSoft_live
CMakeLists.txt
- applets
- libraries
..
Why does the compiler search for libEuroSoftProject... and not for
libEuroSoft_live...? When i remove the project tag from root CMakeLists.txt it
searches for libProject... The final libEuroSoft_live is already exisiting in
build-dir/android-build/libs/armeabi-v7a/...
Do you have any advice for me?
Regards Michael
SYSTRONIK Elektronik u. Systemtechnik GmbH, Gewerbestr. 57, D-88636 Illmensee
Registergericht Ulm - HRB 710423, Sitz der Gesellschaft Illmensee, USt-IdNr. DE
811 264 405
Geschäftsführer: Dipl.-VW Elmar Fritz, Ing. Ramon J. van Tuijl, Dipl.-Ing. (FH)
Richard Skoberla
Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen.
Wenn Sie nicht der richtige Adressat sind oder die E-Mail irrtümlich erhalten
haben, informieren
Sie bitte sofort den Absender und löschen Sie die E-Mail. Das unerlaubte
Kopieren sowie die unbefugte Weitergabe der E-Mail ist nicht gestattet.
This e-mail may contain confidential and / or privileged information. If you
are not the intended recipient or the e-mail may contain error, inform you
immediately ask the sender and delete the e-mail. Unauthorized copying,
unauthorized disclosure of e-mail is strictly forbidden.
cmake_minimum_required(VERSION 3.16)
set(APPLICATION_COPYRIGHT "2015-2022")
set(APPLICATION_NAME "EuroSoft live")
set(ORGANIZATION_DOMAIN "www.systronik.com")
set(ORGANIZATION_NAME "Systronik")
set(APPLICATION_VERSION 2.11.0)
include(${CMAKE_CURRENT_SOURCE_DIR}/../../global_conf.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/../../global_functions.cmake)
project(EuroSoft_live VERSION ${APPLICATION_VERSION} LANGUAGES CXX)
# Set up AUTOMOC and some sensible defaults for runtime execution
# When using Qt 6.3, you can replace the code block below with
# qt_standard_project_setup()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt5 Qt6 COMPONENTS Core REQUIRED)
find_package(Qt5 COMPONENTS Bluetooth Charts Concurrent Gui Multimedia Network
Qml Quick Script Sql WebSockets WebChannel Widgets Xml REQUIRED)
if(ANDROID)
find_package(Qt5 COMPONENTS AndroidExtras PrintSupport REQUIRED)
endif()
if(MSVC OR MACOS)
find_package(Qt5 COMPONENTS SerialPort PrintSupport REQUIRED)
endif()
# Resources:
file (GLOB_RECURSE 3rdarty_headers CONFIGURE_DEPENDS
"../../libraries/3rdparty/*.h")
set (3rdparty_includeDirs "")
foreach (_headerFile ${3rdarty_headers})
get_filename_component(_dir ${_headerFile} PATH)
list (APPEND EuroSoftUi_includeDirs ${_dir})
endforeach()
list (REMOVE_DUPLICATES 3rdparty_includeDirs)
include_directories(
..
${3rdparty_includeDirs}
../../libraries/EuroSoft/..
../../libraries/EuroSoftUi/..
)
set(EuroSoft_live_src
../../libraries/EuroSoftUi/supporting/ComponentInitializer.cpp
../../libraries/EuroSoftUi/supporting/ComponentInitializer.h
EuroSoftLiveController.cpp EuroSoftLiveController.h
EuroSoftLiveViewQml.cpp EuroSoftLiveViewQml.h
main.cpp
)
set(EuroSoft_live_rc
EuroSoft_live.qrc
../../libraries/EuroSoft/EuroSoft.qrc
../../libraries/EuroSoftUi/EuroSoftUi.qrc
../../libraries/EuroSoftUi/EuroSoftUi_resources.qrc
../../applets/measurement/measurement.qrc
../../applets/settings/settings.qrc
../../libraries/3rdparty/3rdparty.qrc
../../textdata/ApplicationMetaData/EuroSoftProject_metadata.qrc
../../translations/compiled/EuroSoftProject_translations.qrc
../../translations/compiled/qtbase_translations.qrc
../../translations/compiled/qtconnectivity_translations.qrc
../../translations/compiled/qtquickcontrols_translations.qrc
)
if(MSVC)
set(EuroSoft_live_rc
${EuroSoft_live_rc}
../../libraries/EuroSoft/loggerconfig/supporting/images/CapbsSensIcons.qrc
)
enable_language("RC")
add_executable(${PROJECT_NAME} WIN32
${EuroSoft_live_src}
${EuroSoft_live_rc}
${CMAKE_CURRENT_SOURCE_DIR}/windows/icon.rc
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/EuroSoft/Win10Compatibility.manifest
)
elseif(ANDROID)
set(ANDROID_MIN_SDK_VERSION CACHE INTERNAL 23)
set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android CACHE INTERNAL
"")
set(QT_ANDROID_BUILD_ALL_ABIS CACHE INTERNAL ON)
set(QT_ANDROID_APP_NAME CACHE INTERNAL "${APPLICATION_NAME}")
set(QT_ANDROID_APP_VERSION CACHE INTERNAL "${APPLICATION_VERSION}")
set(QT_ANDROID_APP_VERSION_CODE CACHE INTERNAL 123456)
set(QT_ANDROID_APPLICATION_BINARY CACHE INTERNAL "EuroSoft_live")
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(${PROJECT_NAME} SHARED
${EuroSoft_live_src}
${EuroSoft_live_rc}
${ANDROID_SOURCES})
if(QT_ANDROID_BUILD_ALL_ABIS)
set_target_properties(${PROJECT_NAME} PROPERTIES ANDROID_ABIS
"armeabi-v7a;arm64-v8a")
endif()
add_custom_command(
TARGET ${PROJECT_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)
# set(COPY_TO_PATH
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/libEuroSoftProject_${ANDROID_ABI}.so)
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy
# $<TARGET_FILE:${PROJECT_NAME}>
# ${COPY_TO_PATH}
# COMMENT "Copying '${PROJECT_NAME}' library to
'${COPY_TO_PATH}'")
#set(COPY_PATH
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../../android-build/libs/${ANDROID_ABI})
set(COPY_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${COPY_PATH}/lib${PROJECT_NAME}_${ANDROID_ABI}.so
${COPY_PATH}/libEuroSoftProject_${ANDROID_ABI}.so
)
else()
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE
EuroSoft_live_src
EuroSoft_live_rc)
endif()
target_include_directories(${PROJECT_NAME} PRIVATE
../../applets/measurement/..
../../applets/settings/..
${3rdparty_includeDirs}
../../libraries/EuroSoft/..
../../libraries/EuroSoftUi/..
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
DISABLE_LIBRARY_FEATURES
EXTERNAL_COMPILER
NCREPORT_IMPORT
NCREPORT_NO_QPRINTER
QT_DISABLE_DEPRECATED_BEFORE=0x050F00
APPLICATION_COPYRIGHT="2015-2022"
APPLICATION_NAME="EuroSoft live"
ORGANIZATION_DOMAIN="www.systronik.com"
ORGANIZATION_NAME="Systronik"
APPLICATION_VERSION="2.11.0"
)
if(${build_lib_measurementApplets})
target_compile_definitions(${PROJECT_NAME} PUBLIC
ENABLE_MEASUREMENT_APPLETS
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt::Bluetooth
Qt::Charts
Qt::Concurrent
Qt::Core
Qt::Gui
Qt::Multimedia
Qt::Network
Qt::Qml
Qt::Quick
Qt::Script
Qt::Sql
Qt::WebSockets
Qt::Widgets
Qt::Xml
)
if(CMAKE_BUILD_TYPE STREQUAL Release)
target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_NO_DEBUG_OUTPUT
)
endif()
if(NOT MACOS)
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE FALSE
)
endif()
if(MSVC)
target_compile_definitions(${PROJECT_NAME} PRIVATE
BUILD_DLL
QCUSTOMPLOT_USE_OPENGL
MP
)
target_link_libraries(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/../../applets/measurement/measurement.lib
${CMAKE_CURRENT_BINARY_DIR}/../../applets/settings/settings.lib
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/EuroSoft/EuroSoft.lib
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/EuroSoftUi/EuroSoftUi.lib
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/3rdparty/QCustomPlot/QCustomPlot.lib
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/QuickDownload/lib/win/QuickDownload${LIB_SUFFIX}.lib
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/SCodes/lib/win/SCodes${LIB_SUFFIX}.lib
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/S6600RemoteDisplay/lib/win/S6600RemoteDisplay${LIB_SUFFIX}.lib
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/win/NCReport${LIB_SUFFIX}2.lib
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/win/NCReportZint${LIB_SUFFIX}2.lib
Qt::PrintSupport
Qt::WebChannel
SetupAPI
hid
user32
opengl32.lib
)
endif()
if(ANDROID)
target_compile_definitions(${PROJECT_NAME} PRIVATE
QCUSTOMPLOT_USE_OPENGL
)
target_link_libraries(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/../../applets/measurement/libmeasurement.a
${CMAKE_CURRENT_BINARY_DIR}/../../applets/settings/libsettings.a
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/EuroSoft/libEuroSoft.a
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/EuroSoftUi/libEuroSoftUi.a
${CMAKE_CURRENT_BINARY_DIR}/../../libraries/3rdparty/QCustomPlot/libQCustomPlot.a
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/QuickDownload/lib/android_${ANDROID_ABI}/libQuickDownload${LIB_SUFFIX}.a
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/SCodes/lib/android_${ANDROID_ABI}/libSCodes${LIB_SUFFIX}.a
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/S6600RemoteDisplay/lib/android_${ANDROID_ABI}/libS6600RemoteDisplay${LIB_SUFFIX}.a
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/android_${ANDROID_ABI}/libNCReport${LIB_SUFFIX}_${ANDROID_ABI}.so
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/android_${ANDROID_ABI}/libNCReportZint${LIB_SUFFIX}_${ANDROID_ABI}.so
Qt::WebChannel
Qt::AndroidExtras
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}/libNCReportZint${LIB_SUFFIX}_${ANDROID_ABI}.so)
list(REMOVE_DUPLICATES CUSTOM_ANDROID_EXTRA_LIBS)
string(REPLACE ";" "," CUSTOM_ANDROID_EXTRA_LIBS_STRING
"${CUSTOM_ANDROID_EXTRA_LIBS}")
set(ANDROID_EXTRA_LIBS "${CUSTOM_ANDROID_EXTRA_LIBS_STRING}" CACHE INTERNAL
"")
endif()
if(IOS)
target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_NO_PRINTER
)
target_link_libraries(${PROJECT_NAME} PRIVATE
"-framework Photos"
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/ios/libNCReport.a
${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/3rdparty/ncreport/lib/ios/libNCReportZint.a
)
endif()
if(MACOS)
target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_NO_PRINTER
)
target_link_libraries(${PROJECT_NAME} PRIVATE
"-framework NCReport"
NCReportZint
)
endif()
if(MACOS OR MSVC)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt::SerialPort
)
endif()
if(MSVC)
endif()
#install(TARGETS ${PROJECT_NAME}
# BUNDLE DESTINATION .
# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
# Consider using qt_generate_deploy_app_script() for app deployment if
# the project can use Qt 6.3. In that case rerun qmake2cmake with
# --min-qt-version=6.3.
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest