Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Debug. App Dir: how to correct work with files
Qt 6.11 is out! See what's new in the release blog

Debug. App Dir: how to correct work with files

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 4 Posters 3.6k Views 1 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.
  • sitesvS sitesv

    I fould solution:

    CONFIG -= debug_and_release
    
    J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by J.Hilk
    #12

    @sitesv

    A word of caution!
    With no shadow build folder set, you're doing in source builds and are now you are mixing debug and release builds as well!

    I would highly recommend to not do this, you'll (eventually) end up with apparently incomprehensible compile errors!


    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    sitesvS 1 Reply Last reply
    1
    • J.HilkJ J.Hilk

      @sitesv

      A word of caution!
      With no shadow build folder set, you're doing in source builds and are now you are mixing debug and release builds as well!

      I would highly recommend to not do this, you'll (eventually) end up with apparently incomprehensible compile errors!

      sitesvS Offline
      sitesvS Offline
      sitesv
      wrote on last edited by
      #13

      @J-Hilk said in Debug. App Dir: how to correct work with files:

      A word of caution!
      With no shadow build folder set, you're doing in source builds and are now you are mixing debug and release builds as well!

      I thought that shadow build needs for building projects by various compiler types only. Could you please explain, what could be damaged without shadow build?

      J.HilkJ 1 Reply Last reply
      0
      • sitesvS sitesv

        @J-Hilk said in Debug. App Dir: how to correct work with files:

        A word of caution!
        With no shadow build folder set, you're doing in source builds and are now you are mixing debug and release builds as well!

        I thought that shadow build needs for building projects by various compiler types only. Could you please explain, what could be damaged without shadow build?

        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #14

        @sitesv
        first of, without a shadow build folder, the makefile, the .qmake.stash all compiler/qmake generated files (moc files, obj files, ui files, resource files etc.) will be in your source directory, and make it highly unreadable, auto generated source files should always be kept separately. If any thing ever fails (happens often enough) and the clean option of QtCreator does not clean everything needed you can simply delete the build folder and your done.

        secondly, switching from debug to release can already cause problems, not just changing to a completely different compiler


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        sitesvS 1 Reply Last reply
        2
        • J.HilkJ J.Hilk

          @sitesv
          first of, without a shadow build folder, the makefile, the .qmake.stash all compiler/qmake generated files (moc files, obj files, ui files, resource files etc.) will be in your source directory, and make it highly unreadable, auto generated source files should always be kept separately. If any thing ever fails (happens often enough) and the clean option of QtCreator does not clean everything needed you can simply delete the build folder and your done.

          secondly, switching from debug to release can already cause problems, not just changing to a completely different compiler

          sitesvS Offline
          sitesvS Offline
          sitesv
          wrote on last edited by sitesv
          #15

          @J-Hilk Thank you!

          J.HilkJ 1 Reply Last reply
          0
          • sitesvS sitesv

            @J-Hilk Thank you!

            J.HilkJ Offline
            J.HilkJ Offline
            J.Hilk
            Moderators
            wrote on last edited by
            #16

            @sitesv
            I'm still not sure, what exactly is your case here, but if you only want to go up one folder and down into an other one you can do the following as well, without modifying the pro file:

            /*
            m_langPath = QApplication::applicationDirPath();
            m_langPath.append("/languages");
            QDir dir(m_langPath);
            QStringList fileNames = dir.entryList(QStringList("TranslationExample_*.qm"));
            */
            
            m_langPath = QApplication::applicationDirPath();
            QDir dir(m_langPath);
            dir.cdUp();
            dir.cd("languages")
            QStringList fileNames = dir.entryList(QStringList("TranslationExample_*.qm"));
            

            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            sitesvS 1 Reply Last reply
            0
            • J.HilkJ J.Hilk

              @sitesv
              I'm still not sure, what exactly is your case here, but if you only want to go up one folder and down into an other one you can do the following as well, without modifying the pro file:

              /*
              m_langPath = QApplication::applicationDirPath();
              m_langPath.append("/languages");
              QDir dir(m_langPath);
              QStringList fileNames = dir.entryList(QStringList("TranslationExample_*.qm"));
              */
              
              m_langPath = QApplication::applicationDirPath();
              QDir dir(m_langPath);
              dir.cdUp();
              dir.cd("languages")
              QStringList fileNames = dir.entryList(QStringList("TranslationExample_*.qm"));
              
              sitesvS Offline
              sitesvS Offline
              sitesv
              wrote on last edited by sitesv
              #17

              @J-Hilk said in Debug. App Dir: how to correct work with files:

              //*.pro file

              defineTest(copyToDestDir) {
              files = $$1
              dir = $$2
              # replace slashes in destination path for Windows
              win32:dir ~= s,/,\,g

              for(file, files) {
                  # replace slashes in source path for Windows
                  win32:file ~= s,/,\\,g
              
                  QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$shell_quote($$file) $$shell_quote($$dir) $$escape_expand(\\n\\t)
              }
              
              export(QMAKE_POST_LINK)
              

              }

              copyToDestDir($$PWD/translations, $$DESTDIR/translations)

              This code is not working.

              sitesvS 1 Reply Last reply
              0
              • sitesvS sitesv

                @J-Hilk said in Debug. App Dir: how to correct work with files:

                //*.pro file

                defineTest(copyToDestDir) {
                files = $$1
                dir = $$2
                # replace slashes in destination path for Windows
                win32:dir ~= s,/,\,g

                for(file, files) {
                    # replace slashes in source path for Windows
                    win32:file ~= s,/,\\,g
                
                    QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$shell_quote($$file) $$shell_quote($$dir) $$escape_expand(\\n\\t)
                }
                
                export(QMAKE_POST_LINK)
                

                }

                copyToDestDir($$PWD/translations, $$DESTDIR/translations)

                This code is not working.

                sitesvS Offline
                sitesvS Offline
                sitesv
                wrote on last edited by
                #18

                @J-Hilk
                Just added couple of string:

                message($$files)
                message($$dir)
                

                There is the next output:

                Project MESSAGE: C:/Users/z/Documents/language/translations
                Project MESSAGE: \translations

                I think $$DESTDIR should be different.

                J.HilkJ 1 Reply Last reply
                0
                • sitesvS sitesv

                  @J-Hilk
                  Just added couple of string:

                  message($$files)
                  message($$dir)
                  

                  There is the next output:

                  Project MESSAGE: C:/Users/z/Documents/language/translations
                  Project MESSAGE: \translations

                  I think $$DESTDIR should be different.

                  J.HilkJ Offline
                  J.HilkJ Offline
                  J.Hilk
                  Moderators
                  wrote on last edited by
                  #19

                  @sitesv well, for once, you can tell DESTDIR what is shall be!

                  For example, my DESTDIR looks like this:

                  CONFIG(release, debug|release) {
                      DESTDIR     = $$PWD/../Deployment/release
                  }
                  
                  CONFIG(debug, debug|release) {
                      DESTDIR     = $$PWD/../Deployment/debug
                  }
                  

                  This results in a new folder outside my shadow build folder, that has the name Deployment. In that, there will be 2 additional folders, Release and Debug. In those, the compiled exe will be copied(and executed when started from QtCreator) and the previous function will copy my specified folders to there as well.

                  In case of the translation files, (from the example line I posted) it would look like this for a release build:
                  ..../Deployment/Release/translations


                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                  Q: What's that?
                  A: It's blue light.
                  Q: What does it do?
                  A: It turns blue.

                  sitesvS 1 Reply Last reply
                  1
                  • J.HilkJ J.Hilk

                    @sitesv well, for once, you can tell DESTDIR what is shall be!

                    For example, my DESTDIR looks like this:

                    CONFIG(release, debug|release) {
                        DESTDIR     = $$PWD/../Deployment/release
                    }
                    
                    CONFIG(debug, debug|release) {
                        DESTDIR     = $$PWD/../Deployment/debug
                    }
                    

                    This results in a new folder outside my shadow build folder, that has the name Deployment. In that, there will be 2 additional folders, Release and Debug. In those, the compiled exe will be copied(and executed when started from QtCreator) and the previous function will copy my specified folders to there as well.

                    In case of the translation files, (from the example line I posted) it would look like this for a release build:
                    ..../Deployment/Release/translations

                    sitesvS Offline
                    sitesvS Offline
                    sitesv
                    wrote on last edited by
                    #20

                    @J-Hilk I'm done what you advise. But it is still not working... Files are not copied.
                    Please, check a project in attach.
                    link text

                    J.HilkJ 1 Reply Last reply
                    0
                    • sitesvS sitesv

                      @J-Hilk I'm done what you advise. But it is still not working... Files are not copied.
                      Please, check a project in attach.
                      link text

                      J.HilkJ Offline
                      J.HilkJ Offline
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #21

                      @sitesv also a reason, why I advocate a shadow build folder! I was unable to open/build your project until I deleted all generated files :(

                      Anyway, you actually get an error message about what fails:

                      cp: ./translations and /Users/.../path/../translations are identical (not copied).

                      Which is misleading at this point, because you actually forgot to add a comma between the the arguments.

                      from
                      copyToDestDir($$PWD/translations $$DESTDIR/translations)
                      
                      to
                      copyToDestDir($$PWD/translations, $$DESTDIR/translations)
                      

                      b6da683d-6c4c-4a0b-8a84-07d125b018a4-image.png

                      every time you now call rebuild (I think it has to be rebuild, not simply build) the copy operation should happen


                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      sitesvS 1 Reply Last reply
                      1
                      • J.HilkJ J.Hilk

                        @sitesv also a reason, why I advocate a shadow build folder! I was unable to open/build your project until I deleted all generated files :(

                        Anyway, you actually get an error message about what fails:

                        cp: ./translations and /Users/.../path/../translations are identical (not copied).

                        Which is misleading at this point, because you actually forgot to add a comma between the the arguments.

                        from
                        copyToDestDir($$PWD/translations $$DESTDIR/translations)
                        
                        to
                        copyToDestDir($$PWD/translations, $$DESTDIR/translations)
                        

                        b6da683d-6c4c-4a0b-8a84-07d125b018a4-image.png

                        every time you now call rebuild (I think it has to be rebuild, not simply build) the copy operation should happen

                        sitesvS Offline
                        sitesvS Offline
                        sitesv
                        wrote on last edited by
                        #22

                        @J-Hilk It works! Thank you!
                        One more Q.
                        If the 'folder with files' has many files and in summary has a big volume (for example 200M), is it correct to every time copy it?

                        J.HilkJ 1 Reply Last reply
                        1
                        • sitesvS sitesv

                          @J-Hilk It works! Thank you!
                          One more Q.
                          If the 'folder with files' has many files and in summary has a big volume (for example 200M), is it correct to every time copy it?

                          J.HilkJ Offline
                          J.HilkJ Offline
                          J.Hilk
                          Moderators
                          wrote on last edited by
                          #23

                          @sitesv well, I wouldn't recommend it!

                          But if you know your files haven't changed (since the last rebuild) simply "build" your project (ctrl + b if you use QtCreator) and it shouldn't try to do the copy operation that run


                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                          Q: What's that?
                          A: It's blue light.
                          Q: What does it do?
                          A: It turns blue.

                          1 Reply Last reply
                          1

                          • Login

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