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. qmake to cmake, are there any tools to help automate this?
Qt 6.11 is out! See what's new in the release blog

qmake to cmake, are there any tools to help automate this?

Scheduled Pinned Locked Moved Unsolved General and Desktop
cmakeqmake
4 Posts 2 Posters 2.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.
  • F Offline
    F Offline
    feistykittykat
    wrote on last edited by feistykittykat
    #1

    Hey folks, so I'm a total noob to cmake, and I'm trying to convert my current qmake setup over (since I figure that it has to happen sooner or later). However, I my qmake has a bunch of weird stuff in it that I'm not sure how to convert over:

    # For use with Visual Studio 
    
    message("Beginning qmake build of project_name.pro")
    
    TEMPLATE = app
    TARGET = project_name
    QT += core \
          opengl \ 
    	  gui \
    	  widgets \
    	  concurrent \ # Mutexes/multithreading
    	  openglextensions \
    	  multimedia \
    	  gamepad \ # Controller support
    	  network # TCP/IP
    
    # Set compiler flags /////////////////////////////////////////////////////////////
    QMAKE_CXXFLAGS += /MP # Multiprocess compile, much faster
    
    # MSVC versions after 15.3 are fickle with the flags required to use more modern c++ variants
    QMAKE_CXXFLAGS *= /std:c++17 # Add if not there, this may be the ticket
    # QMAKE_CXXFLAGS += -std=c++17 # For GCC/Clang
    # QMAKE_CXXFLAGS += -std=c++1z
    
    # Set general configuration options /////////////////////////////////////////////////
    CONFIG += c++latest # Add support for c++17.
    # CONFIG += c++1z # another attempt at C++17 support
    CONFIG += qt thread # console 
    CONFIG += debug_and_release # Creates additional debug and release folders, but need it for debug
    
    CONFIG(debug, debug|release){
        DESTDIR = ../app/debug
    	DEFINES += DEBUG_MODE
    } 
    else {
        DESTDIR = ../app/release
    }
    
    # Replace O2 flag with O3 flag
    #CONFIG(release, debug|release) {
    #    QMAKE_CXXFLAGS_RELEASE -= -O1
    #	QMAKE_CXXFLAGS_RELEASE -= -O2
    #	QMAKE_CXXFLAGS_RELEASE *= -O3
    #}
    
    # Do not display debug output in release mode
    CONFIG(debug, debug|release) : CONFIG += debug_info
    CONFIG(release, debug|release) : DEFINES += QT_NO_DEBUG_OUTPUT
    
    CONFIG += no_lflags_merge # Ensures that the list of libraries stored in the LIBS variable is not reduced to a list of unique values before it is used.
    # CONFIG += CONSOLE # makes this a console application
    CONFIG -= flat # flattens file hierarchy, subtract if this is not desired
    
    # Defines //////////////////////////////////////////////////////////////////////////
    DEFINES += _UNICODE _ENABLE_EXTENDED_ALIGNED_STORAGE WIN64 QT_DLL QT_OPENGL_LIB QT_OPENGLEXTENSIONS_LIB QT_WIDGETS_LIB
    DEFINES += DEVELOP_MODE
    DEFINES += LINALG_USE_EIGEN
    INCLUDEPATH += ./qt_generated \
        . \
        ./qt_generated/$(ConfigurationName) 
    	
    LIBS += -lopengl32 \
        -lglu32 
    DEPENDPATH += .
    
    
    # Add Libraries ////////////////////////////////////////////////////////////////////
    # Don't forget to add to unit tests project as well, or else Intellisense errors will carry over
    # Include PythonQt and required libraries
    # Maybe not needed here, since python.prf is included when PythonQt is built?
    # Note that both windows and linux style library links work in windows
    # LIBS += -L$$(PYTHON_LIB)/ -lpython$$(PYTHON_VERSION) # L"PATH" adds PATH to library search directory list, and -lName loads library Name during linking
    
    # Enable import <PythonQt.h>
    # INCLUDEPATH += $$PWD/src/third_party/pythonqt
    
    #include ( ../third_party/PythonQt/build/python.prf )   #Was pulled from  PythonQt build
    include ( ../third_party/PythonQt/build/common.prf )  
    include ( ../third_party/PythonQt/build/PythonQt.prf )  
    #include ( ../third_party/PythonQt/build/PythonQt_QtAll.prf )  
    
    
    # Compile against release version of python
    CONFIG(debug, debug|release) : DEFINES += PYTHONQT_USE_RELEASE_PYTHON_FALLBACK
    
    # Eigen
    INCLUDEPATH += $$PWD/src/third_party/eigen \
    			   $$PWD/src/third_party/eigen/Eigen
    
    # ASSIMP
    # To be able to write <module.h>
    INCLUDEPATH += ../third_party/assimp/assimp-5.0.0/include
    INCLUDEPATH += ../third_party/assimp/assimp-5.0.0/build/include
    CONFIG(debug, debug|release) : LIBS += -L$$PWD/lib/assimp -lassimp_d
    CONFIG(release, debug|release) : LIBS += -L$$PWD/lib/assimp -lassimp
    
    # PhysX
    DEFINES += PX_PHYSX_STATIC_LIB
    INCLUDEPATH += ../../PhysX/physx/include \
    			   ../../PhysX/pxshared/include
    CONFIG(debug, debug|release) { 
    	LIBS += -L$$PWD/lib/physx/debug -lPhysX_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXCharacterKinematic_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXCommon_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXCooking_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXExtensions_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXFoundation_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXPvdSDK_static_32
    	LIBS += -L$$PWD/lib/physx/debug -lPhysXVehicle_static_32
    }
    CONFIG(release, debug|release) { 
    	# Always needed
    	LIBS += -L$$PWD/lib/physx/release -lPhysXCommon_static_32
    	
    	# Always needed
    	LIBS += -L$$PWD/lib/physx/release -lPhysX_static_32
    	
    	# Always needed
    	LIBS += -L$$PWD/lib/physx/release -lPhysXFoundation_static_32
    	
    	# To cook geometry data on the fly
    	LIBS += -L$$PWD/lib/physx/release -lPhysXCooking_static_32
    	
    	# Other
    	LIBS += -L$$PWD/lib/physx/release -lPhysXCharacterKinematic_static_32
    	LIBS += -L$$PWD/lib/physx/release -lPhysXExtensions_static_32
    	LIBS += -L$$PWD/lib/physx/release -lPhysXPvdSDK_static_32
    	LIBS += -L$$PWD/lib/physx/release -lPhysXVehicle_static_32
    }
    
    # FreeType
    INCLUDEPATH +=  ../third_party/freetype-2.10.1/include
    CONFIG(debug, debug|release) : LIBS += -L$$PWD/lib/freetype/debug -lfreetype
    CONFIG(release, debug|release) : LIBS += -L$$PWD/lib/freetype/release -lfreetype
    
    # SoLoud
    INCLUDEPATH += ../third_party/soloud/include
    CONFIG(debug, debug|release) { 
    	LIBS += -L$$PWD/lib/soloud/debug -lsoloud_x86_d
    	LIBS += -L$$PWD/lib/soloud/debug -lsoloud_static_x86_d
    }
    CONFIG(release, debug|release) { 
    	LIBS += -L$$PWD/lib/soloud/release -lsoloud_x86
    	LIBS += -L$$PWD/lib/soloud/release -lsoloud_static_x86
    }
    
    
    # Include Visual Leak Detector //////////////////////////////////////////////////////////////////
    INCLUDEPATH += "../third_party/Visual Leak Detector/include/"
    LIBS        += -L"../third_party/Visual Leak Detector/lib/Win32"	
    	
    			   
    # Set directories //////////////////////////////////////////////////////////////////
    MOC_DIR += ./qt_generated/moc
    OBJECTS_DIR += ./qt_generated/obj
    UI_DIR += ./qt_generated/ui
    RCC_DIR += ./qt_generated
    
    message("Loaded .pro files, now loading .pri")
    
    # Load in library files for project
    include(project_name.pri)
    
    message("Loaded .pri files")
    

    For example, do "TEMPLATE" and "TARGET" mean anything for cmake? Can I print out messages similarly? Can I add to my DEFINES, LIB, INCLUDEPATH, and all those other variables the same way? Is there something similar to CONFIG? What about my MOC_DIR, OBJECTS_DIR, etc? And how would I override flags like with QMAKE_CXXFLAGS ? I don't even know where to start, it's all a bit overwhelming.

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

      Hi,

      A quick search showed that Kitware has such a script for the base things.

      There's likely something as well in the dev branch of Qt since Qt 6 uses cmake as build system.

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

      F 1 Reply Last reply
      1
      • SGaistS SGaist

        Hi,

        A quick search showed that Kitware has such a script for the base things.

        There's likely something as well in the dev branch of Qt since Qt 6 uses cmake as build system.

        F Offline
        F Offline
        feistykittykat
        wrote on last edited by
        #3

        @SGaist Thanks, but I feel like it would be more work to learn and set up Ruby than it would be to attempt this by hand. I did find this script, but I'm not sure if there's any documentation on it, or if it even works properly. I'll give it a go, it'd just be nice to be able to sanity check things.

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

          AFAIK, it's the script that was used to bootstrap the port from qmake to cmake so it should do a pretty good job.

          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
          1

          • Login

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