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. Different files are generated with cmake and with qmake
Forum Updated to NodeBB v4.3 + New Features

Different files are generated with cmake and with qmake

Scheduled Pinned Locked Moved Unsolved General and Desktop
12 Posts 5 Posters 947 Views 3 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.
  • posktomtenP Offline
    posktomtenP Offline
    posktomten
    wrote on last edited by posktomten
    #1

    Hey!
    Windows 10, MinGW GCC 11.2.0
    When I use cmake:
    "about.dll" size 85 KB
    "abouttest.exe" 593 KB

    When I use qmake:
    "about.dll" size 38 KB
    "abouttest.exe" 524 KB

    Linux Ubuntu 22.04
    The size varies slightly

    ldd (linux) indicates that "abouttest" knows where "about.so" is. Remembers the location from the compilation.

    I thought the methods were different, but the result was the same. Is there a reason to start using cmake?

    https://gitlab.com/posktomten/libabout
    Sincerely
    Ingemar Ceicer

    posktomten

    D 1 Reply Last reply
    0
    • posktomtenP posktomten

      Hey!
      Windows 10, MinGW GCC 11.2.0
      When I use cmake:
      "about.dll" size 85 KB
      "abouttest.exe" 593 KB

      When I use qmake:
      "about.dll" size 38 KB
      "abouttest.exe" 524 KB

      Linux Ubuntu 22.04
      The size varies slightly

      ldd (linux) indicates that "abouttest" knows where "about.so" is. Remembers the location from the compilation.

      I thought the methods were different, but the result was the same. Is there a reason to start using cmake?

      https://gitlab.com/posktomten/libabout
      Sincerely
      Ingemar Ceicer

      D Offline
      D Offline
      DerReisende
      wrote on last edited by
      #2

      @posktomten maybe you are building cmake in debug mode and qmake in release?

      1 Reply Last reply
      0
      • posktomtenP Offline
        posktomtenP Offline
        posktomten
        wrote on last edited by posktomten
        #3

        No, then the files will be much larger.
        (I'm using MinGW GCC 11.2.0, haven't tested with MSVC)

        posktomten

        1 Reply Last reply
        0
        • posktomtenP Offline
          posktomtenP Offline
          posktomten
          wrote on last edited by
          #4

          Now I have tested with MSVC. The files don't get bigger.

          posktomten

          JoeCFDJ 1 Reply Last reply
          0
          • Chris KawaC Offline
            Chris KawaC Offline
            Chris Kawa
            Lifetime Qt Champion
            wrote on last edited by
            #5

            CMake and qmake don't compile or link your app. All they do is set up parameters for the compiler/linker, and those are the same in both cases, so you can set both build tools to produce exactly the same outputs.
            Don't guess. Just pick one file and look at the compilation log from both build tools. Compare what options go directly into compiling/linking. Some default is probably different, that's all. Maybe one sets optimizer for size and the other for speed or something like that.

            1 Reply Last reply
            0
            • C Offline
              C Offline
              ChrisW67
              wrote on last edited by
              #6

              On my Linux box with GCC the qmake generated Makefile builds with the -O2 compiler flag.

              ...
              g++ -c -pipe -O2 -std=gnu++1z -Wall -Wextra -D_REENTRANT -fPIC -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DABOUT_LIBRARY -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o about.o about.cpp
              ...
              
              chrisw@newton:/tmp/libabout/code$ ls -l ../code-lib/
              total 44
              lrwxrwxrwx 1 chrisw chrisw    17 Dec  4 11:05 libabout.so -> libabout.so.1.0.0
              lrwxrwxrwx 1 chrisw chrisw    17 Dec  4 11:05 libabout.so.1 -> libabout.so.1.0.0
              lrwxrwxrwx 1 chrisw chrisw    17 Dec  4 11:05 libabout.so.1.0 -> libabout.so.1.0.0
              -rwxrwxr-x 1 chrisw chrisw 43616 Dec  4 11:05 libabout.so.1.0.0
              

              The CMake generated Makefile does not seem to specify optimization options

              ...
              [75%] Building CXX object CMakeFiles/about.dir/about.cpp.o
              /usr/bin/c++ -DABOUT_LIBRARY -DQT_CORE_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -Dabout_EXPORTS -I/tmp/libabout/code -I/tmp/libabout/code/about_autogen/include -isystem /home/chrisw/Qt/6.4.0/gcc_64/include/QtWidgets -isystem /home/chrisw/Qt/6.4.0/gcc_64/include -isystem /home/chrisw/Qt/6.4.0/gcc_64/include/QtCore -isystem /home/chrisw/Qt/6.4.0/gcc_64/mkspecs/linux-g++ -isystem /home/chrisw/Qt/6.4.0/gcc_64/include/QtGui -fPIC -fPIC -std=gnu++17 -MD -MT CMakeFiles/about.dir/about.cpp.o -MF CMakeFiles/about.dir/about.cpp.o.d -o CMakeFiles/about.dir/about.cpp.o -c /tmp/libabout/code/about.cpp
              ...
              
              chrisw@newton:/tmp/libabout/code$ ls -l ../code-lib/
              total 56
              -rwxrwxr-x 1 chrisw chrisw 56512 Dec  4 11:01 libabout.so
              
              1 Reply Last reply
              1
              • posktomtenP posktomten

                Now I have tested with MSVC. The files don't get bigger.

                JoeCFDJ Offline
                JoeCFDJ Offline
                JoeCFD
                wrote on last edited by
                #7

                @posktomten you can check if the default flags are the same in both builds.

                1 Reply Last reply
                0
                • posktomtenP Offline
                  posktomtenP Offline
                  posktomten
                  wrote on last edited by posktomten
                  #8

                  Fixed a typo
                  And a big thank you for the help and all the points of view!

                  Been doing this all day. Something I don't understand.
                  Same inputs to the compiler? But different results when using cmake and when using qmake.

                  // cmake
                  // Changes -O3 to -O2
                  macro(remove_cxx_flag flag)
                     string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
                  endmacro()
                  remove_cxx_flag("-O3")
                  set(CMAKE_CXX_FLAGS_RELEASE "-O2${CMAKE_CXX_FLAGS_RELEASE}")
                  
                  message(${CMAKE_CXX_FLAGS_RELEASE}) // -O2 -DNDEBUG
                  // size: 84 KB
                  
                  // qmake
                  QMAKE_CXXFLAGS_RELEASE += -DNDEBUG
                  message($$QMAKE_CXXFLAGS_RELEASE)  // -O2 -DNDEBUG
                  // size: 35 KB
                  
                  
                  // Compiled using the command prompt
                  
                  qmake -project ../code/about.pro
                  qmake ../code/about.pro
                  mingw32-make
                  
                  // size 38 KB
                    message($$QMAKE_CXXFLAGS_RELEASE)  // -O2 -DNDEBUGG
                  
                  
                  cmake -G "MinGW Makefiles"
                  cmake --build .
                  mingw32-make
                  
                  // size 94 KB
                    message(${CMAKE_CXX_FLAGS_RELEASE}) // -O2 -DNDEBUG
                  

                  posktomten

                  1 Reply Last reply
                  0
                  • Chris KawaC Offline
                    Chris KawaC Offline
                    Chris Kawa
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @posktomten I rather meant to put CMake into verbose mode, to see something like what @ChrisW67 posted, not just look at one variable.
                    QMAKE_CXXFLAGS_RELEASE might not contain everything that is passed. At least look at the linker flags too, QMAKE_LFLAGS_RELEASE, but better would be to look at the actual commands executed.

                    1 Reply Last reply
                    0
                    • posktomtenP Offline
                      posktomtenP Offline
                      posktomten
                      wrote on last edited by posktomten
                      #10

                      Hey!
                      Thanks for all the suggestions.
                      @Chris-Kawa probably has the best solution. I haven't succeeded yet.
                      I can state:
                      The difference in the created file size (*.dll, *.so) depending on whether cmake or qmake is used:
                      Linux, GCC: insignificant
                      Windows, MSVC: insignificant
                      Windows, MinGW GCC: significant

                      posktomten

                      1 Reply Last reply
                      0
                      • C Offline
                        C Offline
                        ChrisW67
                        wrote on last edited by ChrisW67
                        #11

                        The qmake-generated Makefile is verbose enough. You can get the verbose form from the CMake generated Makefile:

                        mingw32-make VERBOSE=1
                        

                        I see that CMake does not specify -D_REENTRANT which could change code inclusions. It also calls the C++ compiler via c++ which, even if symlinked to g++, might trigger g++ to use different defaults. Lots of possibilities.

                        1 Reply Last reply
                        0
                        • posktomtenP Offline
                          posktomtenP Offline
                          posktomten
                          wrote on last edited by
                          #12

                          Thanks!
                          I'll have to test that

                          posktomten

                          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