Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. qmake SUBDIRS and diamond dependencies
Qt 6.12 LTS is out! See what's new in the release blog

qmake SUBDIRS and diamond dependencies

Scheduled Pinned Locked Moved Unsolved Qt Creator and other tools
23 Posts 4 Posters 6.2k 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.
  • H HendrikGerloff

    Thank you for the replies.
    @aha_1980 : I got the idea, but I still need to manage all the dependencies in the top most project file. I had more in mind that I have a pool of modules that can be reused in different projects. And modules can depend on modules. Over time and with a growing amount of modules it will be inconvenient / difficult to set up all the dependencies. Therefore I would like to avoid it and pull out the dependencies automatically. But as I see it there is no build in way to do it?

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

    @HendrikGerloff

    I'm not sure I can follow you. The dependencies for this project (call it ProjA) are now set up correctly.

    If you include it in another project, you need to specify the dependencies to ProjA outside, i.e. one level up. However, ProjA is still self-contained.

    Or what did you have in mind?

    Regards

    Qt has to stay free or it will die.

    1 Reply Last reply
    1
    • aha_1980A aha_1980

      @koahnig said in qmake SUBDIRS and diamond dependencies:

      CONFIG += ordered

      No, please NOT! Don't do that.

      Why do you specify dependencies and still use CONFIG+=ORDERED?

      Please let the kitten live: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

      K Offline
      K Offline
      koahnig
      wrote on last edited by
      #7

      @aha_1980 said in qmake SUBDIRS and diamond dependencies:

      @koahnig said in qmake SUBDIRS and diamond dependencies:

      CONFIG += ordered

      No, please NOT! Don't do that.

      Why do you specify dependencies and still use CONFIG+=ORDERED?

      Please let the kitten live: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

      Thanks for hint.

      Certainly it looked like a tautology to me therefore

      @koahnig said in qmake SUBDIRS and diamond dependencies:

      I am not sure if there is now too much done, but it is working in my cases.

      However, I could get the kitten to fly finally with that "ordered" statement. Afterwards I was overwhelmed by pragmatism. ;)

      It was some time back. Therefore, there might have been a bug in the template, if that is possible at all.

      Vote the answer(s) that helped you to solve your issue(s)

      aha_1980A 1 Reply Last reply
      1
      • K koahnig

        @aha_1980 said in qmake SUBDIRS and diamond dependencies:

        @koahnig said in qmake SUBDIRS and diamond dependencies:

        CONFIG += ordered

        No, please NOT! Don't do that.

        Why do you specify dependencies and still use CONFIG+=ORDERED?

        Please let the kitten live: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

        Thanks for hint.

        Certainly it looked like a tautology to me therefore

        @koahnig said in qmake SUBDIRS and diamond dependencies:

        I am not sure if there is now too much done, but it is working in my cases.

        However, I could get the kitten to fly finally with that "ordered" statement. Afterwards I was overwhelmed by pragmatism. ;)

        It was some time back. Therefore, there might have been a bug in the template, if that is possible at all.

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

        Hi @koahnig,

        as I already wrote in the other post, the whole dependency handling in qmake is very fragile - I learned the hard way

        You don't get a warning if you do it wrong, you build will just fail. Also, the wiki page is far from perfect with giving good examples.

        Regards

        Qt has to stay free or it will die.

        1 Reply Last reply
        2
        • H HendrikGerloff

          Thank you for the replies.
          @aha_1980 : I got the idea, but I still need to manage all the dependencies in the top most project file. I had more in mind that I have a pool of modules that can be reused in different projects. And modules can depend on modules. Over time and with a growing amount of modules it will be inconvenient / difficult to set up all the dependencies. Therefore I would like to avoid it and pull out the dependencies automatically. But as I see it there is no build in way to do it?

          K Offline
          K Offline
          koahnig
          wrote on last edited by
          #9

          @HendrikGerloff said in qmake SUBDIRS and diamond dependencies:

          Thank you for the replies.
          @aha_1980 : I got the idea, but I still need to manage all the dependencies in the top most project file. I had more in mind that I have a pool of modules that can be reused in different projects. And modules can depend on modules. Over time and with a growing amount of modules it will be inconvenient / difficult to set up all the dependencies. Therefore I would like to avoid it and pull out the dependencies automatically. But as I see it there is no build in way to do it?

          You do not need to define all dependencies for all of your applications.

          I have a bunch of dlls and handle their compilation through one subdirs dlls.pro. Then I have a bunch of .pros (one for each application). All application .pros are summarized in another subdirs template .pro, which is the "main" project file for my handling. There I have only the dependency for each application with the dlls.pro.

          The separation suggested by @aha_1980 is basically with my dlls.pro. However, I do not have my source there, which would be quite a nightmere to handle. I have the separate .pros of dlls.pro there. The source origins are handled through self-defined qmake macros. I do not consider this as optimal. The outcome is more shaped by legacy.

          Therefore if you start freshly to setup things. I think the separation as suggested by @aha_1980 is certainly a very good approach.

          Vote the answer(s) that helped you to solve your issue(s)

          1 Reply Last reply
          1
          • guerinoniG Offline
            guerinoniG Offline
            guerinoni
            wrote on last edited by
            #10

            @HendrikGerloff
            if you want you can check my boilerpalte https://github.com/guerinoni/cpp-qt-project-structure-template.git

            aha_1980A H 2 Replies Last reply
            0
            • guerinoniG guerinoni

              @HendrikGerloff
              if you want you can check my boilerpalte https://github.com/guerinoni/cpp-qt-project-structure-template.git

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

              @guerinoni Sorry, but a template using CONFIG+=ordered cannot be considered useful!

              Again: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

              Regads

              Qt has to stay free or it will die.

              K 2 Replies Last reply
              2
              • aha_1980A aha_1980

                @guerinoni Sorry, but a template using CONFIG+=ordered cannot be considered useful!

                Again: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

                Regads

                K Offline
                K Offline
                koahnig
                wrote on last edited by
                #12

                @aha_1980 said in qmake SUBDIRS and diamond dependencies:

                @guerinoni Sorry, but a template using CONFIG+=ordered cannot be considered useful!

                Again: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

                Regads

                The referenced article is a good read. At least there is an argument that you might kill the multi-core capability with ordered statement.

                Vote the answer(s) that helped you to solve your issue(s)

                1 Reply Last reply
                2
                • aha_1980A aha_1980

                  @guerinoni Sorry, but a template using CONFIG+=ordered cannot be considered useful!

                  Again: https://blog.rburchell.com/2013/10/every-time-you-configordered-kitten-dies.html

                  Regads

                  K Offline
                  K Offline
                  koahnig
                  wrote on last edited by
                  #13

                  @aha_1980

                  Bad luck.
                  I am working currently with the large project in question. Basically I am using "CONFIG += ordered" in 2 subdirs template project files. Both statements have been commented out. All remains of previous qmake and adjacent compilations removed. Ran qmake and started build. It stopped pretty quickly. The hierachy is obviously not recognized because make complaints that the recipe for one of the targets is missing.
                  The same done and either of the statements reactivated. Basically the same problems remain, but certainly with different targets in complaints.

                  I am using
                  SUBDIRS += statements
                  .subdir = statements
                  .depends = statements

                  Especially the .depends statements shall be fine.
                  SUBDIRS += has the sequence of projects from deep down libs up to the applications requiring those libs. That exact sequence I would use when I have to recompile manually.

                  My conclusion remains that the ordered statements are required. When those 2 statements have been reactivated, the whole compilation went smoothly through.

                  Vote the answer(s) that helped you to solve your issue(s)

                  aha_1980A 1 Reply Last reply
                  0
                  • K koahnig

                    @aha_1980

                    Bad luck.
                    I am working currently with the large project in question. Basically I am using "CONFIG += ordered" in 2 subdirs template project files. Both statements have been commented out. All remains of previous qmake and adjacent compilations removed. Ran qmake and started build. It stopped pretty quickly. The hierachy is obviously not recognized because make complaints that the recipe for one of the targets is missing.
                    The same done and either of the statements reactivated. Basically the same problems remain, but certainly with different targets in complaints.

                    I am using
                    SUBDIRS += statements
                    .subdir = statements
                    .depends = statements

                    Especially the .depends statements shall be fine.
                    SUBDIRS += has the sequence of projects from deep down libs up to the applications requiring those libs. That exact sequence I would use when I have to recompile manually.

                    My conclusion remains that the ordered statements are required. When those 2 statements have been reactivated, the whole compilation went smoothly through.

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

                    @koahnig

                    Please show your .pro file.

                    My conclusion remains that the ordered statements are required.

                    It is definitely not required(1), and it kills parallel builds. That said, even in some Qt modules (e.g. websockets), you'll find this statement. Replacing it with proper dependency code seems to be an advanced topic ;)

                    Regards

                    (1) It took me some time to make the parallel build of a company project sane. The problems occurred because I did not understand the qmake Syntax and had errors within.

                    Qt has to stay free or it will die.

                    K 1 Reply Last reply
                    0
                    • aha_1980A aha_1980

                      @koahnig

                      Please show your .pro file.

                      My conclusion remains that the ordered statements are required.

                      It is definitely not required(1), and it kills parallel builds. That said, even in some Qt modules (e.g. websockets), you'll find this statement. Replacing it with proper dependency code seems to be an advanced topic ;)

                      Regards

                      (1) It took me some time to make the parallel build of a company project sane. The problems occurred because I did not understand the qmake Syntax and had errors within.

                      K Offline
                      K Offline
                      koahnig
                      wrote on last edited by
                      #15

                      @aha_1980

                      It is getting ridiculous.

                      TEMPLATE = subdirs
                      
                      SUBDIRS = App4Dll
                      SUBDIRS += Dll4Dll
                      SUBDIRS += dll_DO_
                      
                      # where to find the sub projects - give the folders
                      App4Dll.subdir    = ./App4Dll
                      Dll4Dll.subdir    = ./Dll4Dll
                      dll_DO_.subdir          = ./dll_DO_
                      
                      # what subproject depends on others
                      App4Dll.depends = Dll4Dll
                      Dll4Dll.depends = dll_DO_
                      
                      CONFIG += ordered
                      

                      That is all boiled down to the basic functionality. It should do all I need. dll_DO_ is another subdirs template. All sequence stuff is already reversed.
                      As shown as above qmake is working. When last line is commented, it will not worked anymore.
                      Error message is:

                      18:59:23: Running steps for project ESAndroid...
                      18:59:23: Starting: "C:\Qt\5.14.1\android\bin\qmake.exe" E:\Source\Android\E\ES\ESAndroid.pro -spec android-clang "CONFIG+=qtquickcompiler" ANDROID_ABIS="armeabi-v7a"
                      18:59:23: The process "C:\Qt\5.14.1\android\bin\qmake.exe" exited normally.
                      18:59:23: Starting: "f:\Android\Sdk4Qt5.14.1\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" -f r:/build-ESAndroid-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_1_for_Android-Release/Makefile qmake_all
                      make: *** No rule to make target 'sub---Dll4Dll-qmake_all', needed by 'sub-App4Dll-qmake_all'.  Stop.
                      18:59:23: The process "f:\Android\Sdk4Qt5.14.1\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" exited with code 2.
                      Error while building/deploying project ESAndroid (kit: Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.1 for Android))
                      When executing step "qmake"
                      18:59:23: Elapsed time: 00:00.
                      

                      Vote the answer(s) that helped you to solve your issue(s)

                      aha_1980A 1 Reply Last reply
                      0
                      • K koahnig

                        @aha_1980

                        It is getting ridiculous.

                        TEMPLATE = subdirs
                        
                        SUBDIRS = App4Dll
                        SUBDIRS += Dll4Dll
                        SUBDIRS += dll_DO_
                        
                        # where to find the sub projects - give the folders
                        App4Dll.subdir    = ./App4Dll
                        Dll4Dll.subdir    = ./Dll4Dll
                        dll_DO_.subdir          = ./dll_DO_
                        
                        # what subproject depends on others
                        App4Dll.depends = Dll4Dll
                        Dll4Dll.depends = dll_DO_
                        
                        CONFIG += ordered
                        

                        That is all boiled down to the basic functionality. It should do all I need. dll_DO_ is another subdirs template. All sequence stuff is already reversed.
                        As shown as above qmake is working. When last line is commented, it will not worked anymore.
                        Error message is:

                        18:59:23: Running steps for project ESAndroid...
                        18:59:23: Starting: "C:\Qt\5.14.1\android\bin\qmake.exe" E:\Source\Android\E\ES\ESAndroid.pro -spec android-clang "CONFIG+=qtquickcompiler" ANDROID_ABIS="armeabi-v7a"
                        18:59:23: The process "C:\Qt\5.14.1\android\bin\qmake.exe" exited normally.
                        18:59:23: Starting: "f:\Android\Sdk4Qt5.14.1\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" -f r:/build-ESAndroid-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_1_for_Android-Release/Makefile qmake_all
                        make: *** No rule to make target 'sub---Dll4Dll-qmake_all', needed by 'sub-App4Dll-qmake_all'.  Stop.
                        18:59:23: The process "f:\Android\Sdk4Qt5.14.1\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" exited with code 2.
                        Error while building/deploying project ESAndroid (kit: Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.1 for Android))
                        When executing step "qmake"
                        18:59:23: Elapsed time: 00:00.
                        
                        aha_1980A Offline
                        aha_1980A Offline
                        aha_1980
                        Lifetime Qt Champion
                        wrote on last edited by
                        #16

                        @koahnig said in qmake SUBDIRS and diamond dependencies:

                        App4Dll.subdir = ./App4Dll
                        Dll4Dll.subdir = ./Dll4Dll
                        dll_DO_.subdir = ./dll_DO_

                        These are your problems, 99% sure.

                        Please show the corresponding directory structure, and where all the pro files live.

                        Qt has to stay free or it will die.

                        K 1 Reply Last reply
                        0
                        • aha_1980A aha_1980

                          @koahnig said in qmake SUBDIRS and diamond dependencies:

                          App4Dll.subdir = ./App4Dll
                          Dll4Dll.subdir = ./Dll4Dll
                          dll_DO_.subdir = ./dll_DO_

                          These are your problems, 99% sure.

                          Please show the corresponding directory structure, and where all the pro files live.

                          K Offline
                          K Offline
                          koahnig
                          wrote on last edited by
                          #17

                          @aha_1980

                          You were pretty fast ;)

                          Here is the structure. For first dir of folder some entries removed.

                           Datentr„ger in Laufwerk E: ist DATA
                           Volumeseriennummer: C265-8340
                          
                           Verzeichnis von e:\Source\Android\E\ES
                          
                          26.02.2020  19:11    <DIR>          .
                          26.02.2020  19:11    <DIR>          ..
                          26.02.2020  18:35    <DIR>          App4Dll
                          26.02.2020  19:11                 0 aus
                          25.02.2020  19:01               689 config.xml
                          28.10.2018  13:36               777 config_xml.in
                          26.02.2020  18:36    <DIR>          Dll4Dll
                          26.02.2020  15:08    <DIR>          dll_DO_
                          26.02.2020  18:58               354 ESAndroid.pro
                          21.02.2020  18:36           101'017 ESAndroid.pro.user
                                         8 Datei(en),        235'801 Bytes
                                        12 Verzeichnis(se), 137'678'741'504 Bytes frei
                           Datentr„ger in Laufwerk E: ist DATA
                           Volumeseriennummer: C265-8340
                          
                           Verzeichnis von e:\Source\Android\E\ES\App4Dll
                          
                          26.02.2020  18:35    <DIR>          .
                          26.02.2020  18:35    <DIR>          ..
                          25.02.2020  16:08             5'376 App4Dll.pro
                                         1 Datei(en),          5'376 Bytes
                                         2 Verzeichnis(se), 137'678'741'504 Bytes frei
                           Datentr„ger in Laufwerk E: ist DATA
                           Volumeseriennummer: C265-8340
                          
                           Verzeichnis von e:\Source\Android\E\ES\Dll4Dll
                          
                          26.02.2020  18:36    <DIR>          .
                          26.02.2020  18:36    <DIR>          ..
                          24.02.2020  13:17             4'063 Dll4Dll.pro
                                         1 Datei(en),          4'063 Bytes
                                         2 Verzeichnis(se), 137'678'741'504 Bytes frei
                           Datentr„ger in Laufwerk E: ist DATA
                           Volumeseriennummer: C265-8340
                          
                           Verzeichnis von e:\Source\Android\E\ES\dll_DO_
                          
                          26.02.2020  15:08    <DIR>          .
                          26.02.2020  15:08    <DIR>          ..
                          26.02.2020  15:08             2'076 dll_DO_.pro
                          25.02.2020  19:01    <DIR>          EDll
                          25.02.2020  19:01    <DIR>          IDll
                          25.02.2020  19:01    <DIR>          NBDll
                          25.02.2020  19:01    <DIR>          NDll
                          25.02.2020  19:01    <DIR>          NIDll
                          25.02.2020  19:01    <DIR>          NLibDO_
                          22.02.2020  12:04    <DIR>          QNtp
                          25.02.2020  19:01    <DIR>          RLDO_A
                          25.02.2020  19:01    <DIR>          RLDO_Bs
                          25.02.2020  19:01    <DIR>          RLDO_Br
                          25.02.2020  19:01    <DIR>          RLDO_M
                          25.02.2020  19:01    <DIR>          RLDO_NR
                          25.02.2020  19:01    <DIR>          RLDO_OO
                          25.02.2020  19:01    <DIR>          RLDO_Ssr
                          25.02.2020  19:01    <DIR>          SDll
                                         1 Datei(en),          2'076 Bytes
                                        17 Verzeichnis(se), 137'678'741'504 Bytes frei
                          

                          Vote the answer(s) that helped you to solve your issue(s)

                          aha_1980A 1 Reply Last reply
                          0
                          • K koahnig

                            @aha_1980

                            You were pretty fast ;)

                            Here is the structure. For first dir of folder some entries removed.

                             Datentr„ger in Laufwerk E: ist DATA
                             Volumeseriennummer: C265-8340
                            
                             Verzeichnis von e:\Source\Android\E\ES
                            
                            26.02.2020  19:11    <DIR>          .
                            26.02.2020  19:11    <DIR>          ..
                            26.02.2020  18:35    <DIR>          App4Dll
                            26.02.2020  19:11                 0 aus
                            25.02.2020  19:01               689 config.xml
                            28.10.2018  13:36               777 config_xml.in
                            26.02.2020  18:36    <DIR>          Dll4Dll
                            26.02.2020  15:08    <DIR>          dll_DO_
                            26.02.2020  18:58               354 ESAndroid.pro
                            21.02.2020  18:36           101'017 ESAndroid.pro.user
                                           8 Datei(en),        235'801 Bytes
                                          12 Verzeichnis(se), 137'678'741'504 Bytes frei
                             Datentr„ger in Laufwerk E: ist DATA
                             Volumeseriennummer: C265-8340
                            
                             Verzeichnis von e:\Source\Android\E\ES\App4Dll
                            
                            26.02.2020  18:35    <DIR>          .
                            26.02.2020  18:35    <DIR>          ..
                            25.02.2020  16:08             5'376 App4Dll.pro
                                           1 Datei(en),          5'376 Bytes
                                           2 Verzeichnis(se), 137'678'741'504 Bytes frei
                             Datentr„ger in Laufwerk E: ist DATA
                             Volumeseriennummer: C265-8340
                            
                             Verzeichnis von e:\Source\Android\E\ES\Dll4Dll
                            
                            26.02.2020  18:36    <DIR>          .
                            26.02.2020  18:36    <DIR>          ..
                            24.02.2020  13:17             4'063 Dll4Dll.pro
                                           1 Datei(en),          4'063 Bytes
                                           2 Verzeichnis(se), 137'678'741'504 Bytes frei
                             Datentr„ger in Laufwerk E: ist DATA
                             Volumeseriennummer: C265-8340
                            
                             Verzeichnis von e:\Source\Android\E\ES\dll_DO_
                            
                            26.02.2020  15:08    <DIR>          .
                            26.02.2020  15:08    <DIR>          ..
                            26.02.2020  15:08             2'076 dll_DO_.pro
                            25.02.2020  19:01    <DIR>          EDll
                            25.02.2020  19:01    <DIR>          IDll
                            25.02.2020  19:01    <DIR>          NBDll
                            25.02.2020  19:01    <DIR>          NDll
                            25.02.2020  19:01    <DIR>          NIDll
                            25.02.2020  19:01    <DIR>          NLibDO_
                            22.02.2020  12:04    <DIR>          QNtp
                            25.02.2020  19:01    <DIR>          RLDO_A
                            25.02.2020  19:01    <DIR>          RLDO_Bs
                            25.02.2020  19:01    <DIR>          RLDO_Br
                            25.02.2020  19:01    <DIR>          RLDO_M
                            25.02.2020  19:01    <DIR>          RLDO_NR
                            25.02.2020  19:01    <DIR>          RLDO_OO
                            25.02.2020  19:01    <DIR>          RLDO_Ssr
                            25.02.2020  19:01    <DIR>          SDll
                                           1 Datei(en),          2'076 Bytes
                                          17 Verzeichnis(se), 137'678'741'504 Bytes frei
                            
                            aha_1980A Offline
                            aha_1980A Offline
                            aha_1980
                            Lifetime Qt Champion
                            wrote on last edited by aha_1980
                            #18

                            @koahnig I happened to be around.

                            So, your subdirs have the same name as your pro files, like App4Dll/App4Dll.pro.

                            I repeat it: in this case, the App4Dll.subdir line is superflous (and probably wrong, because this is hard to get right).

                            As next step, remove these completely:

                            App4Dll.subdir = ./App4Dll
                            Dll4Dll.subdir = ./Dll4Dll
                            dll_DO_.subdir = ./dll_DO_
                            

                            Also remove CONFIG+=ordered, clean everything and then rerun qmake and make.

                            It should work.

                            Qt has to stay free or it will die.

                            K 1 Reply Last reply
                            1
                            • aha_1980A aha_1980

                              @koahnig I happened to be around.

                              So, your subdirs have the same name as your pro files, like App4Dll/App4Dll.pro.

                              I repeat it: in this case, the App4Dll.subdir line is superflous (and probably wrong, because this is hard to get right).

                              As next step, remove these completely:

                              App4Dll.subdir = ./App4Dll
                              Dll4Dll.subdir = ./Dll4Dll
                              dll_DO_.subdir = ./dll_DO_
                              

                              Also remove CONFIG+=ordered, clean everything and then rerun qmake and make.

                              It should work.

                              K Offline
                              K Offline
                              koahnig
                              wrote on last edited by
                              #19

                              @aha_1980

                              TEMPLATE = subdirs
                              
                              SUBDIRS = App4Dll
                              SUBDIRS += Dll4Dll
                              SUBDIRS += dll_DO_
                              
                              # where to find the sub projects - give the folders
                              #App4Dll.subdir    = ./App4Dll
                              #Dll4Dll.subdir    = ./Dll4Dll
                              #dll_DO_.subdir          = ./dll_DO_
                              
                              # what subproject depends on others
                              App4Dll.depends = Dll4Dll
                              Dll4Dll.depends = dll_DO_
                              
                              #CONFIG += ordered
                              

                              This does work 8|
                              You are correct. Unbelievable.
                              Just ran qmake from creator and it worked. Also did a full compilation of my project.

                              Thanks a lot for the hint.

                              Vote the answer(s) that helped you to solve your issue(s)

                              1 Reply Last reply
                              1
                              • K Offline
                                K Offline
                                koahnig
                                wrote on last edited by
                                #20

                                I have modified also dll_DO_.pro which is also based on subdirs template.

                                The whole compilation with ordered modifier is sped up from approximately 9:30 to around 7:45. Therefore there is a significant increase in compilation speed of about 20-25% on an eight core Windows 64 bit machine for that specific project and tool chain.

                                However, as it turns out the use of .subdir does not work. I have 15 different subfolders and 1 of them would require the .subdir specification, since the name used in SUBDIRS has been different. However, I had to modify the name in SUBDIRS to make it homogenous with the subprojects. Otherwise the ordered modifier was required.

                                Vote the answer(s) that helped you to solve your issue(s)

                                1 Reply Last reply
                                0
                                • aha_1980A aha_1980

                                  @HendrikGerloff

                                  I don't see a big problem in solving this dependency.

                                  I guess the src.file = src/src.pro lines are the problem, as most often has been for me.

                                  The best tip I can give you: put all subdirs into a subdirectory with a pro file of the the same name, e.g. src/ with src/src.pro.

                                  In that case, the sub.file line is even unneeded!

                                  So the problems are most likely the a...c subdirs.

                                  You can manage that with an hierarchy of subdirs:

                                  main.pro (SUBDIRS)
                                  SUBDIRS += src
                                  
                                  src/src.pro (SUBDIRS)
                                  SUBDIRS += src aSub bSub cSub
                                  
                                  src.depends += aSub
                                  src.depends += cSub
                                  
                                  aSub.depends += cSub
                                  bSub.depends += cSub
                                  
                                  src/src/src.pro (app)
                                  
                                  src/baSub/aSub.pro (lib)
                                  
                                  src/bSub/bSub.pro (lib)
                                  
                                  src/cSub/cSub.pro (lib)
                                  

                                  I hope you got the idea.

                                  Regards

                                  H Offline
                                  H Offline
                                  HendrikGerloff
                                  wrote on last edited by
                                  #21

                                  @aha_1980 said in qmake SUBDIRS and diamond dependencies:

                                  @HendrikGerloff

                                  I don't see a big problem in solving this dependency.

                                  I guess the src.file = src/src.pro lines are the problem, as most often has been for me.

                                  The best tip I can give you: put all subdirs into a subdirectory with a pro file of the the same name, e.g. src/ with src/src.pro.

                                  In that case, the sub.file line is even unneeded!

                                  So the problems are most likely the a...c subdirs.

                                  You can manage that with an hierarchy of subdirs:

                                  main.pro (SUBDIRS)
                                  SUBDIRS += src
                                  
                                  src/src.pro (SUBDIRS)
                                  SUBDIRS += src aSub bSub cSub
                                  
                                  src.depends += aSub
                                  src.depends += cSub
                                  
                                  aSub.depends += cSub
                                  bSub.depends += cSub
                                  
                                  src/src/src.pro (app)
                                  
                                  src/baSub/aSub.pro (lib)
                                  
                                  src/bSub/bSub.pro (lib)
                                  
                                  src/cSub/cSub.pro (lib)
                                  

                                  I hope you got the idea.

                                  Regards

                                  But I still have to manage all dependencies in my top level pro file, right? That was what I wanted to avoid. I hoped that I could define the dependencies in the sub pro files.

                                  1 Reply Last reply
                                  0
                                  • guerinoniG guerinoni

                                    @HendrikGerloff
                                    if you want you can check my boilerpalte https://github.com/guerinoni/cpp-qt-project-structure-template.git

                                    H Offline
                                    H Offline
                                    HendrikGerloff
                                    wrote on last edited by
                                    #22

                                    @guerinoni said in qmake SUBDIRS and diamond dependencies:

                                    @HendrikGerloff
                                    if you want you can check my boilerpalte https://github.com/guerinoni/cpp-qt-project-structure-template.git

                                    You template does not work without CONFIG += ordered so it does not really solve my problem. My problem is that 2 modules both depend on another module which is build twice / at the same time when using more than one core.

                                    guerinoniG 1 Reply Last reply
                                    0
                                    • H HendrikGerloff

                                      @guerinoni said in qmake SUBDIRS and diamond dependencies:

                                      @HendrikGerloff
                                      if you want you can check my boilerpalte https://github.com/guerinoni/cpp-qt-project-structure-template.git

                                      You template does not work without CONFIG += ordered so it does not really solve my problem. My problem is that 2 modules both depend on another module which is build twice / at the same time when using more than one core.

                                      guerinoniG Offline
                                      guerinoniG Offline
                                      guerinoni
                                      wrote on last edited by
                                      #23

                                      @HendrikGerloff I know, maybe my structure is something legacy but it works fine for my jobs... also qt-creator using this for qmake... for the future I am going to use only cmake

                                      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
                                      • Unsolved