Unsolved Android/iOS CMake build errors
-
I'm working on a subdir project using Qt6 and CMake. The project folder consists of two apps and three shared libraries, everything runs fine on macos, but when I try to build for Android or iOS, but I got errors and I don't know how to fix muy CMake files. I'm new using CMake.
For Android I got this
No target architecture defined in json file.
For iOS I got this when
Undefined symbols for architecture x86_64: "_main", referenced from: user_main_trampoline() in libqios_debug.a(qioseventdispatcher.mm.o) (maybe you meant: _qt_main_wrapper, _jinit_c_main_controller , _jinit_d_main_controller ) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) ** BUILD FAILED **
This is my project's tree:
These are my CMake files:
Project's CMakeLists.txt:
cmake_minimum_required(VERSION 3.22) project(DisinglabShoppu VERSION 1.0 LANGUAGES CXX) add_subdirectory(admin) add_subdirectory(client) add_subdirectory(utils) add_subdirectory(shoppumodel) add_subdirectory(restclient)
Admin's CMakeLists.txt:
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package( Qt6 COMPONENTS Quick Core # Mqtt REQUIRED ) #qt_add_resources(${CMAKE_CURRENT_LIST_DIR}/qml.qrc) set(QML_RESOURCES ${CMAKE_CURRENT_LIST_DIR}/qml.qrc ) set (QML_FILES main.qml views/login.qml views/mainMenu.qml views/createCategory.qml views/createProduct.qml views/listEditCategory.qml views/editProduct.qml views/orders.qml views/createExtra.qml views/editExtra.qml views/listEditExtras.qml views/listEditProducts.qml views/editCategory.qml views/store.qml views/orderDetail.qml views/transferInfoList.qml views/transferInfo.qml views/pagomovilList.qml views/pagomovil.qml views/tax.qml views/shippingCharge.qml views/components/CategoryForm.qml views/components/ExtraForm.qml views/components/ProductForm.qml controllers/loginController.js controllers/progressbarController.js controllers/creationController.js controllers/retriveController.js controllers/viewsController.js ) set( RESOURCE_FILES qtquickcontrols2.conf resources/background.jpg resources/logo.png resources/icons/lock.svg resources/icons/person.svg resources/icons/visibility.svg resources/icons/visibility_off.svg resources/icons/chevron_left.svg resources/icons/chevron_right.svg resources/icons/back.svg resources/icons/edit.svg resources/icons/menu.svg resources/icons/remove.svg resources/icons/shoppingcart.svg resources/notification/notification.wav resources/samples/calib3d.jpg resources/samples/core.jpg resources/samples/feature2D.jpg resources/samples/ml.jpg resources/samples/objdetect.jpg resources/samples/retina.jpg ) set( SOURCES ${CMAKE_CURRENT_LIST_DIR}/main.cpp ${CMAKE_CURRENT_LIST_DIR}/src/androidgallery.cpp ) set( HEADERS ${CMAKE_CURRENT_LIST_DIR}/include/androidgallery.h ) set( ANDROID_FILES ${CMAKE_CURRENT_LIST_DIR}/android/AndroidManifest.xml ${CMAKE_CURRENT_LIST_DIR}/android/src/ve/com/disinglab/shoppuAdmin/MyBraodcastReceiver.java ${CMAKE_CURRENT_LIST_DIR}/android/src/ve/com/disinglab/shoppuAdmin/NotificationService.java ) if(ANDROID) qt_add_library(admin SHARED ${QML_RESOURCES} ${SOURCES} ${HEADERS} ${ANDROID_FILES} ) else() qt_add_executable(admin ${QML_RESOURCES} ${SOURCES} ${HEADERS} ) endif() target_include_directories(admin PUBLIC ../restclient ../utils ../shoppumodel ) #qt_import_plugins(admin INCLUDE shoppumodel) target_link_libraries(admin PRIVATE rest-client utils shoppumodel Qt6::Quick Qt6::Core Qt6::Gui Qt6::Qml # Qt6::Mqtt Qt6::CorePrivate ) #set_target_properties(admin PROPERTIES # MACOSX_BUNDLE_GUI_IDENTIFIER shoppu.com # MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} # MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} #)
Client's CMakeLists.txt:
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package( Qt6 COMPONENTS REQUIRED Quick Core Qml Gui WebView # Mqtt ) qt_add_resources(${CMAKE_CURRENT_LIST_DIR}/qml.qrc) set(PROJECT_VERSION 1.1) set(PROJECT_VERSION_MAJOR 1) set(PROJECT_VERSION_MINOR 1) set( QML_RESOURCES ${CMAKE_CURRENT_LIST_DIR}/qml.qrc ) set( SOURCES ${CMAKE_CURRENT_LIST_DIR}/main.cpp ${CMAKE_CURRENT_LIST_DIR}/src/androidgallery.cpp ) set( HEADERS ${CMAKE_CURRENT_LIST_DIR}/include/androidgallery.h ) set( TRANSLATION ${CMAKE_CURRENT_LIST_DIR}/translations/Shoppu_es_us.ts ${CMAKE_CURRENT_LIST_DIR}/translations/Shoppu_es_VE.ts ${CMAKE_CURRENT_LIST_DIR}/translations/Shoppu.ts ) if(ANDROID) set( ANDROID_FILES ${CMAKE_CURRENT_LIST_DIR}/android/AndroidManifest.xml # ${CMAKE_CURRENT_LIST_DIR}/android/src/ve/com/disinglab/shoppuAdmin/MyBraodcastReceiver.java # ${CMAKE_CURRENT_LIST_DIR}/android/src/ve/com/disinglab/shoppuAdmin/NotificationService.java ) add_library(client SHARED ${QML_RESOURCES} ${SOURCES} ${HEADERS} ${ANDROID_FILES}) set(ANDROID_MIN_SDK_VERSION 32) # set_property(TARGET admin PROPERTY ANDROID_ABIS "arm64-v8a;armeabi-v7a") set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android CACHE INTERNAL "") else() qt_add_executable(client ${QML_RESOURCES} ${SOURCES} ${HEADERS} ) endif() #qt_add_translations(client # TS_FILES # ${TRANSLATION} #) target_include_directories(client PUBLIC ../restclient ../utils ../shoppumodel ) target_link_libraries(client PRIVATE rest-client utils shoppumodel Qt6::Quick Qt6::Core Qt6::Gui Qt6::Qml Qt6::WebView Qt6::CorePrivate # Qt6::Mqtt )
RestClient's CMakeLists.txt:
set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package( Qt6 6.5 COMPONENTS Core Network Quick REQUIRED ) set( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/restclient.cpp ) set( HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/restclient.h ${CMAKE_CURRENT_SOURCE_DIR}/include/restclient_global.h ) add_library(rest-client ${SOURCES} ${HEADERS} ) target_link_libraries(rest-client PRIVATE Qt6::Core Qt6::Network Qt6::Qml ) target_include_directories(rest-client PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
Shoppumodel's CMakeLists.txt:
set(PLUGIN_NAME ShoppuModels) set(PLUGIN_NAME SHOPPUMODEL) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package( Qt6 COMPONENTS Core Network Quick REQUIRED ) set( SOURCES ${CMAKE_CURRENT_LIST_DIR}/src/shoppumodelplugin.cpp ${CMAKE_CURRENT_LIST_DIR}/src/billinginfo.cpp ${CMAKE_CURRENT_LIST_DIR}/src/billinginfolist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/cartproduct.cpp ${CMAKE_CURRENT_LIST_DIR}/src/category.cpp ${CMAKE_CURRENT_LIST_DIR}/src/categorylist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/extra.cpp ${CMAKE_CURRENT_LIST_DIR}/src/extralist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/image.cpp ${CMAKE_CURRENT_LIST_DIR}/src/order.cpp ${CMAKE_CURRENT_LIST_DIR}/src/orderedproduct.cpp ${CMAKE_CURRENT_LIST_DIR}/src/orderedproductlist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/orderlist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/pagomovilinfo.cpp ${CMAKE_CURRENT_LIST_DIR}/src/pagomovilinfolist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/paymentinfo.cpp ${CMAKE_CURRENT_LIST_DIR}/src/product.cpp ${CMAKE_CURRENT_LIST_DIR}/src/productlist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/shipmentinfo.cpp ${CMAKE_CURRENT_LIST_DIR}/src/shipmentinfolist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/shippingcharge.cpp ${CMAKE_CURRENT_LIST_DIR}/src/shoppingcart.cpp # ${CMAKE_CURRENT_LIST_DIR}/src/shoppumodel.cpp ${CMAKE_CURRENT_LIST_DIR}/src/store.cpp ${CMAKE_CURRENT_LIST_DIR}/src/storebank.cpp ${CMAKE_CURRENT_LIST_DIR}/src/storebanklist.cpp ${CMAKE_CURRENT_LIST_DIR}/src/tax.cpp ${CMAKE_CURRENT_LIST_DIR}/src/user.cpp ) set( HEADERS ${CMAKE_CURRENT_LIST_DIR}/include/shoppumodelplugin.h ${CMAKE_CURRENT_LIST_DIR}/include/billinginfo.h ${CMAKE_CURRENT_LIST_DIR}/include/billinginfolist.h ${CMAKE_CURRENT_LIST_DIR}/include/cartproduct.h ${CMAKE_CURRENT_LIST_DIR}/include/category.h ${CMAKE_CURRENT_LIST_DIR}/include/categorylist.h ${CMAKE_CURRENT_LIST_DIR}/include/extra.h ${CMAKE_CURRENT_LIST_DIR}/include/extralist.h ${CMAKE_CURRENT_LIST_DIR}/include/image.h ${CMAKE_CURRENT_LIST_DIR}/include/order.h ${CMAKE_CURRENT_LIST_DIR}/include/orderedproduct.h ${CMAKE_CURRENT_LIST_DIR}/include/orderedproductlist.h ${CMAKE_CURRENT_LIST_DIR}/include/orderlist.h ${CMAKE_CURRENT_LIST_DIR}/include/pagomovilinfo.h ${CMAKE_CURRENT_LIST_DIR}/include/pagomovilinfolist.h ${CMAKE_CURRENT_LIST_DIR}/include/paymentinfo.h ${CMAKE_CURRENT_LIST_DIR}/include/product.h ${CMAKE_CURRENT_LIST_DIR}/include/productlist.h ${CMAKE_CURRENT_LIST_DIR}/include/shipmentinfo.h ${CMAKE_CURRENT_LIST_DIR}/include/shipmentinfolist.h ${CMAKE_CURRENT_LIST_DIR}/include/shippingcharge.h # ${CMAKE_CURRENT_LIST_DIR}/include/shoppumodel.h # ${CMAKE_CURRENT_LIST_DIR}/include/shoppumodel_global.h ${CMAKE_CURRENT_LIST_DIR}/include/shoppingcart.h ${CMAKE_CURRENT_LIST_DIR}/include/shoppumodel.h ${CMAKE_CURRENT_LIST_DIR}/include/store.h ${CMAKE_CURRENT_LIST_DIR}/include/storebank.h ${CMAKE_CURRENT_LIST_DIR}/include/storebanklist.h ${CMAKE_CURRENT_LIST_DIR}/include/tax.h ${CMAKE_CURRENT_LIST_DIR}/include/user.h ) set( QML_RESOURCES ${CMAKE_CURRENT_LIST_DIR}/qmldir ${CMAKE_CURRENT_LIST_DIR}/qml.qrc ) add_library(shoppumodel SHARED ${SOURCES} ${HEADERS} ${QML_RESOURCES} ) #qt_add_qml_module(shoppumodel # URI shoppumodel # VERSION 1.0 # QML_FILES ${QML_RESOURCES} # SOURCES ${SOURCES} ${HEADERS} #) target_include_directories(shoppumodel PUBLIC ../restclient ../utils ) target_link_libraries(shoppumodel PRIVATE utils rest-client Qt6::Core Qt6::Network Qt6::Qml ) target_include_directories(shoppumodel PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") #qt_add_qml_module(shoppumodel # URI ShoppuModel # VERSION 1.0 # SOURCES ${SOURCES} ${HEADERS} ${QML_RESOURCES} # RESOURCE_PREFIX /ShoppuModel #) add_custom_command( TARGET shoppumodel POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/qmldir $<TARGET_FILE_DIR:shoppumodel>/qmldir )
Utils' CMakeLists.txt:
set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package( Qt6 6.4 COMPONENTS Core Network # Mqtt REQUIRED ) set( SOURCES ${CMAKE_CURRENT_LIST_DIR}/src/application.cpp ${CMAKE_CURRENT_LIST_DIR}/src/endpoints.cpp # ${CMAKE_CURRENT_LIST_DIR}/src/qmlmqttclient.cpp ${CMAKE_CURRENT_LIST_DIR}/src/restconnector.cpp # ${CMAKE_CURRENT_LIST_DIR}/src/utils.cpp ) set( HEADERS ${CMAKE_CURRENT_LIST_DIR}/include/application.h ${CMAKE_CURRENT_LIST_DIR}/include/endpoints.h # ${CMAKE_CURRENT_LIST_DIR}/include/qmlmqttclient.h ${CMAKE_CURRENT_LIST_DIR}/include/restconnector.h # ${CMAKE_CURRENT_LIST_DIR}/include/utils.h # ${CMAKE_CURRENT_LIST_DIR}/include/utils_global.h ) add_library(utils ${SOURCES} ${HEADERS} ) target_include_directories(utils PUBLIC ../restclient ) target_link_libraries(utils PRIVATE rest-client Qt6::Core Qt6::Network # Qt6::Mqtt ) target_include_directories(utils PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")