Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. Moc issue with osX/iOs application
Forum Updated to NodeBB v4.3 + New Features

Moc issue with osX/iOs application

Scheduled Pinned Locked Moved Unsolved Qt Creator and other tools
18 Posts 3 Posters 5.1k Views 2 Watching
  • 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #8

    Can you post the code that triggers that ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • N Offline
      N Offline
      NAnder
      wrote on last edited by
      #9

      Hi, sorry for the late answer. I got some issues.
      Here is smallest set of code to sample that show the problem:
      project.pro

      QT       += core gui
      
      TARGET = Bugs
      TEMPLATE = app
      
      SOURCES += main.cxx
      HEADERS += test_ios.hxx test_osx.hxx
      

      main.cxx

      #include <QApplication>
      #include "test_ios.hxx"
      #include "test_osx.hxx"
      
      Tests::Tests() {}
      Tests::~Tests() {}
      //#include <TargetConditionals.h>
      #ifdef Q_OS_IOS
      //#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE
      void Tests::Hello() {}
      #endif
      
      int main(int argc, char * argv[])
      {
        Tests bug;
        return 0;
      }
      

      test_ios.hxx

      #include <QApplication>
      #ifdef __APPLE__
      //# include <TargetConditionals.h>
      //# if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE
      #  ifdef Q_OS_IOS
      
      #  include <QObject>
      
      class Tests : public QObject
      {
        Q_OBJECT
      
      public:
        explicit Tests();
        ~Tests();
      
        void Hello();
      };
      
      # endif
      #endif
      

      test_osx.hxx

      #include <QApplication>
      #ifdef __APPLE__
      # include <TargetConditionals.h>
      //# if TARGET_OS_OSX
      #ifdef Q_OS_MACOS
      
      #  include <QObject>
      
      class Tests : public QObject
      {
        Q_OBJECT
      
      public:
        explicit Tests();
        ~Tests();
      };
      
      # endif
      #endif
      

      I create the Xcode project with :

      Qt5.9.1/5.9.1/ios/bin/qmake ../project.pro
      

      Best regards

      kshegunovK 1 Reply Last reply
      0
      • N NAnder

        Hi, sorry for the late answer. I got some issues.
        Here is smallest set of code to sample that show the problem:
        project.pro

        QT       += core gui
        
        TARGET = Bugs
        TEMPLATE = app
        
        SOURCES += main.cxx
        HEADERS += test_ios.hxx test_osx.hxx
        

        main.cxx

        #include <QApplication>
        #include "test_ios.hxx"
        #include "test_osx.hxx"
        
        Tests::Tests() {}
        Tests::~Tests() {}
        //#include <TargetConditionals.h>
        #ifdef Q_OS_IOS
        //#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE
        void Tests::Hello() {}
        #endif
        
        int main(int argc, char * argv[])
        {
          Tests bug;
          return 0;
        }
        

        test_ios.hxx

        #include <QApplication>
        #ifdef __APPLE__
        //# include <TargetConditionals.h>
        //# if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE
        #  ifdef Q_OS_IOS
        
        #  include <QObject>
        
        class Tests : public QObject
        {
          Q_OBJECT
        
        public:
          explicit Tests();
          ~Tests();
        
          void Hello();
        };
        
        # endif
        #endif
        

        test_osx.hxx

        #include <QApplication>
        #ifdef __APPLE__
        # include <TargetConditionals.h>
        //# if TARGET_OS_OSX
        #ifdef Q_OS_MACOS
        
        #  include <QObject>
        
        class Tests : public QObject
        {
          Q_OBJECT
        
        public:
          explicit Tests();
          ~Tests();
        };
        
        # endif
        #endif
        

        I create the Xcode project with :

        Qt5.9.1/5.9.1/ios/bin/qmake ../project.pro
        

        Best regards

        kshegunovK Offline
        kshegunovK Offline
        kshegunov
        Moderators
        wrote on last edited by
        #10

        You're running moc on an empty header (either one of the two is, or both are, empty). So moc complains about not having any class to parse.

        Read and abide by the Qt Code of Conduct

        1 Reply Last reply
        0
        • N Offline
          N Offline
          NAnder
          wrote on last edited by
          #11

          Hi, thx for your answer.
          Yes it should complain about one empty header, that would not be an issue.
          But it complain about the wrong one, when i try compile for iOs, why it say :

          Note: No relevant classes found. No output generated.
          

          about test_ios.hxx

          kshegunovK 1 Reply Last reply
          0
          • N NAnder

            Hi, thx for your answer.
            Yes it should complain about one empty header, that would not be an issue.
            But it complain about the wrong one, when i try compile for iOs, why it say :

            Note: No relevant classes found. No output generated.
            

            about test_ios.hxx

            kshegunovK Offline
            kshegunovK Offline
            kshegunov
            Moderators
            wrote on last edited by
            #12

            My guess would be that __APPLE__ isn't defined.

            Read and abide by the Qt Code of Conduct

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #13

              Rather than having empty headers, just don't try to build that class if it doesn't make sense on a given platform.

              Use scopes in your .pro file to only compile what is needed.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • N Offline
                N Offline
                NAnder
                wrote on last edited by NAnder
                #14

                Hi, thx for the answer.

                __ APPLE__ is defined otherwise test_osx.hxx would generate an empty moc file too, which is not the case.

                Yes using scope in .pro file is the way to avoid useless warning, but I not used it here because I wanted to show that moc only generate a moc file from test_osx.hxx whatever I ask qmake to generate a project for OsX or iOs.

                My question is it the normal moc behaviour to expand only OSX macro when I ask qmake to generate a project for iOs ? If not, why it do it with my sample ?

                Best regards,

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #15

                  For me it generates an empty moc file also for iOS when building for macOS and that's expected. Since you are passing both files to the HEADERS variable moc will be run on both generating an empty file for the other OS since the macro is correctly handled.

                  To have a truly cross-platform code base, use scopes in your .pro file and only include what's relevant to the platform in your source code otherwise it will become quiet quickly a nightmare to maintain.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  2
                  • N Offline
                    N Offline
                    NAnder
                    wrote on last edited by NAnder
                    #16

                    Hi,

                    Thank you for the answers.

                    It took me sometime for write back, because i was training my english to be able to answer here. My question is very clear in my head, but it seems my words are bad.

                    Yes it's generate an empty moc class warning when i compile for mac osX. This is not an issue, first it just a warning, the compilation still go on, and like you said fix the warning is very easy.

                    My question was, why it not work when i try compile for iOS. When i try, I got a warning about test_ios.hxx generating an empty file. And that is a critical error because the compiler will not be able to find the iOS code. Moc seems not expand IOS macro, but always OSX macro whenever it's an OSx or IOs build.

                    Best regards,

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #17

                      Can you check whether it's still the case with more recent version of Qt ?

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        NAnder
                        wrote on last edited by
                        #18

                        Thank a lot for the answer.
                        I'll try as soon I can.

                        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