View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002181CMakeCMakepublic2005-08-24 04:232006-10-04 14:24
Reporter 
Assigned ToBill Hoffman 
PrioritylowSeverityfeatureReproducibilityalways
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0002181: Support of mingw32 and Qt4 open source edition
DescriptionHi!

I've made some changes to support building of Qt4 applications with mingw32. With these changes I'm able to use CMake with the opensource edition of Qt4.

As a basis i've taken cmake 2.0.6 and the FindQt...cmake scripts from the CVS-server.

The changes are:

Modules/Platform/Windows-gcc.cmake:
Adding the line: SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "") # -pic

Modules/CMakeDefaultMakeRuleVariables:
Create import-libraries (libXXX.dll.a) for shared libraries and do not link "gcc" to the application:
# create a shared C++ library
IF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
  IF (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
    SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
        "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> -Wl,--out-implib,<TARGET>.a <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
  ELSE (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
    SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
        "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
  ENDIF (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
ENDIF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)

IF(CMAKE_COMPILER_IS_GNUCXX)
  IF (NOT WIN32)
    SET(CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} -lgcc")
  ENDIF (NOT WIN32)
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

# create a C shared library
IF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
  IF (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
    SET(CMAKE_C_CREATE_SHARED_LIBRARY
        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> -Wl,--out-implib,<TARGET>.a <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
  ELSE (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
    SET(CMAKE_C_CREATE_SHARED_LIBRARY
        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
  ENDIF (WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
ENDIF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)

Modules/FindQt4.cmake:
- Disabling everything related to QTASSISTANT, QTMOTIF and QTNSPLUGIN.
- Adding two macros to compile converted Qt3 applications with Qt4:

# Create a QT3 image collection from the given images and append the filename of the generated file to outfiles.
# QT3_CREATE_IMAGE_COLLECTION(outfiles inputfile ... )
MACRO(QT3_CREATE_IMAGE_COLLECTION outfiles )
  #
  # Precede the current source dir to the image-list
  #
  SET(image_collection "")
  FOREACH(image ${ARGN})
     SET(image_collection "${image_collection};${CMAKE_CURRENT_SOURCE_DIR}/${image}")
  ENDFOREACH(image)

  #
  # Create a custom command for creating the 'image_collection.cpp' file
  #
  ADD_CUSTOM_COMMAND (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/image_collection.cxx
                      COMMAND uic3
                      ARGS
                      -embed qosgviewer
                      ${image_collection}
                      -o image_collection.cxx
                      DEPENDS ${image_collection})

  SET(${outfiles} ${${outfiles}} image_collection.cxx)
ENDMACRO(QT3_CREATE_IMAGE_COLLECTION)

# Wrap a converted QT3-ui-file with uic3 and create needed moc sources.
# QT3_WRAP_UI(outfiles inputfile ... )
MACRO(QT3_WRAP_UI outfiles )
  # get include dirs
  GET_DIRECTORY_PROPERTY(moc_includes_tmp INCLUDE_DIRECTORIES)
  SET(moc_includes)
  FOREACH(it ${moc_includes_tmp})
    SET(moc_includes ${moc_includes} "-I${it}")
  ENDFOREACH(it)

  ADD_DEFINITIONS (-DQT3_SUPPORT)

  FOREACH(it ${ARGN})

    # Create the filenames
    GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
    SET(infile ${CMAKE_CURRENT_SOURCE_DIR}/${it})
    SET(ui_header ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.h)
    SET(ui_source ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.cxx)
    SET(moc_source ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx)

    # Create headers and sources from the ui-file
    ADD_CUSTOM_COMMAND(OUTPUT ${ui_header}
                       COMMAND uic3
                       ARGS
                       -o ${ui_header} ${infile}
                       MAIN_DEPENDENCY ${infile})

    ADD_CUSTOM_COMMAND(OUTPUT ${ui_source}
                       COMMAND uic3
                       ARGS
                       -impl ${ui_header} ${infile}
                       -o ${ui_source}
                       MAIN_DEPENDENCY ${ui_header})

    # Moc the created source (otherwise a "vtable" error occurs)
    ADD_CUSTOM_COMMAND(OUTPUT ${moc_source}
                COMMAND ${QT_MOC_EXECUTABLE}
                ARGS
                ${moc_includes} -o ${moc_source} ${ui_header}
                MAIN_DEPENDENCY ${ui_header})

    SET(${outfiles} ${${outfiles}} ${ui_source} ${moc_source})

  ENDFOREACH(it)
ENDMACRO(QT3_WRAP_UI)
TagsNo tags attached.
Attached Files? file icon CMakeDefaultMakeRuleVariables.cmake [^] (4,568 bytes) 1969-12-31 19:00
? file icon Windows-gcc.cmake [^] (787 bytes) 1969-12-31 19:00
? file icon FindQt4.cmake [^] (33,672 bytes) 1969-12-31 19:00

 Relationships

  Notes
(0002941)
Joern Tuemmler (reporter)
2005-08-24 04:33

Contact information: Joern.Tuemmler@gmx.de
(0003051)
Bill Hoffman (manager)
2005-09-23 15:31

Can you look at CMake 2.2.1 FindQT.cmake and FindQT4.cmake stuff, and apply your changes there?

Thanks.
(0004765)
Alex Neundorf (developer)
2006-08-27 10:50

Does cmake 2.4.3 work for you out of the box ?

 Issue History
Date Modified Username Field Change


Copyright © 2000 - 2018 MantisBT Team