[CMake] combining cmake and qmake

Ryan Pavlik rpavlik at iastate.edu
Wed Mar 3 11:33:00 EST 2010



On 03/03/2010 10:06 AM, Matt Williams wrote:
> On 3 March 2010 16:01, Hicham Mouline<hicham at mouline.org>  wrote:
>    
>> Hello,
>>
>> I have a library that contain the core of my application.
>> I have been running this application in text-mode so far. I will now extend it to use a GUI, and I've chosen Qt.
>>
>> I have used cmake to generate Makefiles on linux/g++4.x and solutions files on win32/vs2008.
>>
>> Qt comes with qmake which takes .pro files as input and also generates Makefiles or vs2008 solution files.
>>
>> Is there a generally advised policy re combining systems with both cmake and qmake?
>>
>> Any suggestions are appreciated,
>>      
> You don't need to (and if you're using cmake - shouldn't) use qmake at
> all. It's very simple to reimplement all the qmake rules using CMake
> and the FindQt4.cmake package.
>
> See http://www.bineteri.com/qtwithcmake and http://qtnode.net/wiki/Qt_with_cmake
>
>    

The simplest Qt cmake file I've come up with, based on converting from a 
Qmake build, is the following - it should be easy to follow and modify.

# Minimal QT Build
# CMake cross-platform build system recipe
# 2010 Ryan Pavlik <rpavlik at iastate.edu> <abiryan at ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC

cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)

# Set package properties
project(qtExample)

###
# Perform build configuration of dependencies

# Set up QT4 and required components
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})

###
# All the project files
set(SOURCES
     main.cpp
     mywindow.cpp
     progressbar.cpp
     trainingdisplay.cpp
     TheApp.cpp)

set(HEADERS
     datastorage.h
     train.h)

set(MOCS
     mywindow.h
     progressbar.h
     TheApp.h)

set(UIS ui/TheApp.ui)

set(RESOURCES theappresources.qrc)

###
# Build and link the project

# Let QT pre-process the files and add the generated files to the source 
list
qt4_wrap_ui(GENERATED_SOURCES ${UIS})
qt4_add_resources(GENERATED_SOURCES ${RESOURCES})
qt4_wrap_cpp(GENERATED_SOURCES ${MOCS})

source_group("Generated Sources - Do Not Edit" FILES ${GENERATED_SOURCES})

# Make sure the compiler can find the pre-processed files from qt4_wrap_ui
include_directories("${CMAKE_BINARY_DIR}")

# Build the app!
add_executable(qt-example
     MACOSX_BUNDLE
     WIN32
     # source files that are actually built direclty
     ${SOURCES}
     ${GENERATED_SOURCES}

     # items included so they show up in your IDE
     ${HEADERS}
     ${UIS}
     ${MOCS}
     ${RESOURCES})

# Link the app!
target_link_libraries(qt-example ${QT_LIBRARIES})


-- 
Ryan Pavlik
HCI Graduate Student
Virtual Reality Applications Center
Iowa State University

rpavlik at iastate.edu
http://academic.cleardefinition.com
Internal VRAC/HCI Site: http://tinyurl.com/rpavlik



More information about the CMake mailing list