Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Problem with Subdirs
Forum Updated to NodeBB v4.3 + New Features

Problem with Subdirs

Scheduled Pinned Locked Moved Solved QML and Qt Quick
8 Posts 2 Posters 550 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Antonio Ortiz
    wrote on last edited by
    #1

    Hi everyone!.
    I'm building an two app for Android using qml (client and admin). I decided to use a Subdir project to create the two application because they share a good portion of code, but when I try run the client app it crash and noticed that it compile with the admin app as a lib.a. How can I compile both app avoiding QtCreator include one in the other as a library?
    This is my project file:

    TEMPLATE = subdirs
    
    SUBDIRS = client admin model utils rest
    
    client.depends = model utils rest
    
    admin.depends = model utils rest
    
    model.depends = utils
    
    utils.depends = rest
    
    aha_1980A 1 Reply Last reply
    0
    • A Antonio Ortiz

      Hi everyone!.
      I'm building an two app for Android using qml (client and admin). I decided to use a Subdir project to create the two application because they share a good portion of code, but when I try run the client app it crash and noticed that it compile with the admin app as a lib.a. How can I compile both app avoiding QtCreator include one in the other as a library?
      This is my project file:

      TEMPLATE = subdirs
      
      SUBDIRS = client admin model utils rest
      
      client.depends = model utils rest
      
      admin.depends = model utils rest
      
      model.depends = utils
      
      utils.depends = rest
      
      aha_1980A Offline
      aha_1980A Offline
      aha_1980
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi @Antonio-Ortiz,

      you will need to show us the client.pro and admin.pro files also.

      What you want to do is perfectly possible, and I've done it several times, so there must be a small problem in your project.

      Regards

      Qt has to stay free or it will die.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        Antonio Ortiz
        wrote on last edited by Antonio Ortiz
        #3

        @aha_1980 Thanks for your quick reply. This are the files

        The client.pro

        TARGET = Shoppu
        
        QT += quick svg qml quickcontrols2 webview mqtt
        
        CONFIG += c++11
        
        android:{
            QT += androidextras
        }
        
        
        # The following define makes your compiler emit warnings if you use
        # any feature of Qt which as been marked deprecated (the exact warnings
        # depend on your compiler). Please consult the documentation of the
        # deprecated API in order to know how to port your code away from it.
        DEFINES += QT_DEPRECATED_WARNINGS
        
        # You can also make your code fail to compile if you use deprecated APIs.
        # In order to do so, uncomment the following line.
        # You can also select to disable deprecated APIs only up to a certain version of Qt.
        #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
        
        SOURCES += \
                main.cpp \
                source/androidgallery.cpp
        
        RESOURCES += \
            qml.qrc \
            translation.qrc
        
        # Additional import path used to resolve QML modules in Qt Creator's code model
        QML_IMPORT_PATH =
        
        # Additional import path used to resolve QML modules just for Qt Quick Designer
        QML_DESIGNER_IMPORT_PATH =
        
        # Default rules for deployment.
        qnx: target.path = /tmp/$${TARGET}/bin
        else: unix:!android: target.path = /opt/$${TARGET}/bin
        !isEmpty(target.path): INSTALLS += target
        
        DISTFILES += \
            android/AndroidManifest.xml \
            android/gradle/wrapper/gradle-wrapper.jar \
            android/gradlew \
            android/res/drawable/logo.png \
            android/res/drawable/splash.xml \
            android/res/values/apptheme.xml \
            android/res/values/libs.xml \
            android/build.gradle \
            android/gradle/wrapper/gradle-wrapper.properties \
            android/gradlew.bat
        
        ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
        
        INCLUDEPATH += $$PWD/../rest \
                       $$PWD/../utils \
                       $$PWD/../model \
        
        DEPENDPATH += $$PWD/../rest \
                      $$PWD/../utils \
                      $$PWD/../model
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
        
        LANGUAGES = es_us es_VE
        
        lupdate_only{
        SOURCES = strings/*.js \
                  views/*.qml \
                  controllers/*qml
        }
        
        # used to create .ts files
         defineReplace(prependAll) {
             for(a,$$1):result += $$2$${a}$$3
             return($$result)
         }
        
         # Available translations
         tsroot = $$join(TARGET,,,.ts)
         tstarget = $$join(TARGET,,,_)
         TRANSLATIONS = $$PWD/translations/$$tsroot
         TRANSLATIONS += $$prependAll(LANGUAGES, $$PWD/translations/$$tstarget, .ts)
        
        # run LRELEASE to generate the qm files
        qtPrepareTool(LRELEASE, lrelease)
         for(tsfile, TRANSLATIONS) {
             command = $$LRELEASE $$tsfile
             system($$command)|error("Failed to run: $$command")
         }
        
        HEADERS += \
            source/androidgallery.h
        
        

        And this is the admin.pro

        TARGET = ShoppuAdmin
        
        QT += quick svg mqtt
        
        android:{
            QT += androidextras
        }
        
        CONFIG += c++11
        
        # The following define makes your compiler emit warnings if you use
        # any feature of Qt which as been marked deprecated (the exact warnings
        # depend on your compiler). Please consult the documentation of the
        # deprecated API in order to know how to port your code away from it.
        DEFINES += QT_DEPRECATED_WARNINGS
        
        # You can also make your code fail to compile if you use deprecated APIs.
        # In order to do so, uncomment the following line.
        # You can also select to disable deprecated APIs only up to a certain version of Qt.
        #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
        
        SOURCES += \
                main.cpp \
            source/androidgallery.cpp \
            source/notificationclient.cpp
        
        HEADERS += \
            source/androidgallery.h \
            source/notificationclient.h
        
        RESOURCES += \
            qml.qrc \
            translation.qrc
        
        INCLUDEPATH += $$PWD/../rest \
                       $$PWD/../utils \
                       $$PWD/../model \
        
        DEPENDPATH += $$PWD/../rest \
                      $$PWD/../utils \
                      $$PWD/../model
        
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
        
        unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
        else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
        
        
        # Additional import path used to resolve QML modules in Qt Creator's code model
        QML_IMPORT_PATH =
        
        # Additional import path used to resolve QML modules just for Qt Quick Designer
        QML_DESIGNER_IMPORT_PATH =
        
        # Default rules for deployment.
        qnx: target.path = /tmp/$${TARGET}/bin
        else: unix:!android: target.path = /opt/$${TARGET}/bin
        !isEmpty(target.path): INSTALLS += target
        
        DISTFILES += \
            android/AndroidManifest.xml \
            android/gradle/wrapper/gradle-wrapper.jar \
            android/gradlew \
            android/res/values/libs.xml \
            android/build.gradle \
            android/gradle/wrapper/gradle-wrapper.properties \
            android/gradlew.bat \
            android/src/ve/com/disinglab/shoppuAdmin/MyBraodcastReceiver.java \
            android/src/ve/com/disinglab/shoppuAdmin/ \
            android/src/ve/com/disinglab/shoppuAdmin/NotificationClient.java
        
        ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
        
        LANGUAGES = es_us es_VE
        
        lupdate_only{
        SOURCES = strings/*.qml \
                  components/*qml \
                  controllers/*qml \
        }
        
        # used to create .ts files
         defineReplace(prependAll) {
             for(a,$$1):result += $$2$${a}$$3
             return($$result)
         }
        
         # Available translations
         tsroot = $$join(TARGET,,,.ts)
         tstarget = $$join(TARGET,,,_)
         TRANSLATIONS = $$PWD/translations/$$tsroot
         TRANSLATIONS += $$prependAll(LANGUAGES, $$PWD/translations/$$tstarget, .ts)
        
        # run LRELEASE to generate the qm files
        qtPrepareTool(LRELEASE, lrelease)
         for(tsfile, TRANSLATIONS) {
             command = $$LRELEASE $$tsfile
             system($$command)|error("Failed to run: $$command")
         }
        
        aha_1980A 1 Reply Last reply
        0
        • A Antonio Ortiz

          @aha_1980 Thanks for your quick reply. This are the files

          The client.pro

          TARGET = Shoppu
          
          QT += quick svg qml quickcontrols2 webview mqtt
          
          CONFIG += c++11
          
          android:{
              QT += androidextras
          }
          
          
          # The following define makes your compiler emit warnings if you use
          # any feature of Qt which as been marked deprecated (the exact warnings
          # depend on your compiler). Please consult the documentation of the
          # deprecated API in order to know how to port your code away from it.
          DEFINES += QT_DEPRECATED_WARNINGS
          
          # You can also make your code fail to compile if you use deprecated APIs.
          # In order to do so, uncomment the following line.
          # You can also select to disable deprecated APIs only up to a certain version of Qt.
          #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
          
          SOURCES += \
                  main.cpp \
                  source/androidgallery.cpp
          
          RESOURCES += \
              qml.qrc \
              translation.qrc
          
          # Additional import path used to resolve QML modules in Qt Creator's code model
          QML_IMPORT_PATH =
          
          # Additional import path used to resolve QML modules just for Qt Quick Designer
          QML_DESIGNER_IMPORT_PATH =
          
          # Default rules for deployment.
          qnx: target.path = /tmp/$${TARGET}/bin
          else: unix:!android: target.path = /opt/$${TARGET}/bin
          !isEmpty(target.path): INSTALLS += target
          
          DISTFILES += \
              android/AndroidManifest.xml \
              android/gradle/wrapper/gradle-wrapper.jar \
              android/gradlew \
              android/res/drawable/logo.png \
              android/res/drawable/splash.xml \
              android/res/values/apptheme.xml \
              android/res/values/libs.xml \
              android/build.gradle \
              android/gradle/wrapper/gradle-wrapper.properties \
              android/gradlew.bat
          
          ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
          
          INCLUDEPATH += $$PWD/../rest \
                         $$PWD/../utils \
                         $$PWD/../model \
          
          DEPENDPATH += $$PWD/../rest \
                        $$PWD/../utils \
                        $$PWD/../model
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
          
          LANGUAGES = es_us es_VE
          
          lupdate_only{
          SOURCES = strings/*.js \
                    views/*.qml \
                    controllers/*qml
          }
          
          # used to create .ts files
           defineReplace(prependAll) {
               for(a,$$1):result += $$2$${a}$$3
               return($$result)
           }
          
           # Available translations
           tsroot = $$join(TARGET,,,.ts)
           tstarget = $$join(TARGET,,,_)
           TRANSLATIONS = $$PWD/translations/$$tsroot
           TRANSLATIONS += $$prependAll(LANGUAGES, $$PWD/translations/$$tstarget, .ts)
          
          # run LRELEASE to generate the qm files
          qtPrepareTool(LRELEASE, lrelease)
           for(tsfile, TRANSLATIONS) {
               command = $$LRELEASE $$tsfile
               system($$command)|error("Failed to run: $$command")
           }
          
          HEADERS += \
              source/androidgallery.h
          
          

          And this is the admin.pro

          TARGET = ShoppuAdmin
          
          QT += quick svg mqtt
          
          android:{
              QT += androidextras
          }
          
          CONFIG += c++11
          
          # The following define makes your compiler emit warnings if you use
          # any feature of Qt which as been marked deprecated (the exact warnings
          # depend on your compiler). Please consult the documentation of the
          # deprecated API in order to know how to port your code away from it.
          DEFINES += QT_DEPRECATED_WARNINGS
          
          # You can also make your code fail to compile if you use deprecated APIs.
          # In order to do so, uncomment the following line.
          # You can also select to disable deprecated APIs only up to a certain version of Qt.
          #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
          
          SOURCES += \
                  main.cpp \
              source/androidgallery.cpp \
              source/notificationclient.cpp
          
          HEADERS += \
              source/androidgallery.h \
              source/notificationclient.h
          
          RESOURCES += \
              qml.qrc \
              translation.qrc
          
          INCLUDEPATH += $$PWD/../rest \
                         $$PWD/../utils \
                         $$PWD/../model \
          
          DEPENDPATH += $$PWD/../rest \
                        $$PWD/../utils \
                        $$PWD/../model
          
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../rest -lrest
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../utils -lutils
          
          unix:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
          else: unix:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../model -lmodel
          
          
          # Additional import path used to resolve QML modules in Qt Creator's code model
          QML_IMPORT_PATH =
          
          # Additional import path used to resolve QML modules just for Qt Quick Designer
          QML_DESIGNER_IMPORT_PATH =
          
          # Default rules for deployment.
          qnx: target.path = /tmp/$${TARGET}/bin
          else: unix:!android: target.path = /opt/$${TARGET}/bin
          !isEmpty(target.path): INSTALLS += target
          
          DISTFILES += \
              android/AndroidManifest.xml \
              android/gradle/wrapper/gradle-wrapper.jar \
              android/gradlew \
              android/res/values/libs.xml \
              android/build.gradle \
              android/gradle/wrapper/gradle-wrapper.properties \
              android/gradlew.bat \
              android/src/ve/com/disinglab/shoppuAdmin/MyBraodcastReceiver.java \
              android/src/ve/com/disinglab/shoppuAdmin/ \
              android/src/ve/com/disinglab/shoppuAdmin/NotificationClient.java
          
          ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
          
          LANGUAGES = es_us es_VE
          
          lupdate_only{
          SOURCES = strings/*.qml \
                    components/*qml \
                    controllers/*qml \
          }
          
          # used to create .ts files
           defineReplace(prependAll) {
               for(a,$$1):result += $$2$${a}$$3
               return($$result)
           }
          
           # Available translations
           tsroot = $$join(TARGET,,,.ts)
           tstarget = $$join(TARGET,,,_)
           TRANSLATIONS = $$PWD/translations/$$tsroot
           TRANSLATIONS += $$prependAll(LANGUAGES, $$PWD/translations/$$tstarget, .ts)
          
          # run LRELEASE to generate the qm files
          qtPrepareTool(LRELEASE, lrelease)
           for(tsfile, TRANSLATIONS) {
               command = $$LRELEASE $$tsfile
               system($$command)|error("Failed to run: $$command")
           }
          
          aha_1980A Offline
          aha_1980A Offline
          aha_1980
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Hi @Antonio-Ortiz,

          what happens if you add TEMPLATE = app to both project files and do a full rebuild?

          Regards

          Qt has to stay free or it will die.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Antonio Ortiz
            wrote on last edited by
            #5

            @aha_1980 said in Problem with Subdirs:

            rebuild

            Still the same error when I try to compile client.

            ~/build-shoppu-Android_for_armeabi_v7a_Clang_Qt_5_13_2_android_armv7-Debug/android-build/src/ve/com/disinglab/shoppuAdmin/NotificationClient.java:23: error: package R does not exist
                        m_builder.setSmallIcon(R.drawable.logo);
            

            As you can see it is trying to use a file from the admin app

            aha_1980A 1 Reply Last reply
            0
            • A Antonio Ortiz

              @aha_1980 said in Problem with Subdirs:

              rebuild

              Still the same error when I try to compile client.

              ~/build-shoppu-Android_for_armeabi_v7a_Clang_Qt_5_13_2_android_armv7-Debug/android-build/src/ve/com/disinglab/shoppuAdmin/NotificationClient.java:23: error: package R does not exist
                          m_builder.setSmallIcon(R.drawable.logo);
              

              As you can see it is trying to use a file from the admin app

              aha_1980A Offline
              aha_1980A Offline
              aha_1980
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @Antonio-Ortiz

              I'm a bit out here, as I don't use Android; but still it sounds strange that it tries to compile a file that is not in the project?!

              Have you cleared all build artifacts and Makefiles (or whatever is used to build for Android)?

              Otherwise I'm currently out of ideas. I can just recommend you to carefully read the build log and see if you find something strange.

              Regards

              Qt has to stay free or it will die.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                Antonio Ortiz
                wrote on last edited by
                #7

                @aha_1980 said in Problem with Subdirs:

                still it sounds strange th

                I notice the same behavior on the desktop build.
                Thanks, I will check the logs

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  Antonio Ortiz
                  wrote on last edited by
                  #8

                  All ready found the error. I was calling a file from the admin folder in my client.pro

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved