[CMake] patch : Qt Static on windows

John Biddiscombe biddisco at cscs.ch
Fri May 12 12:35:21 EDT 2006


Clinton

> How about checking  the .prl file for whether Qt is built as shared 
> libraries or not.  That file holds valuable information about the Qt 
> configuration.
Excellent. Done.
...
     FILE(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
     IF(${QT_CORE_PRL} MATCHES "static")
...

the prl file does not exist on linux, do we need to bother checking for 
another one if it's not win32?


> The real thing your patch does is not set QT_DLL if it is a static Qt 
> library.  That is all that should be necessary.

OK.

> Grepping through the public Qt headers, QT_GUI_LIB is found in only one 
> header file.  It should always be set if using the QtGui library, so 
> that some features that combine QtGui and QtSql can be used.
> The other QT_*_LIB defines are probably bogus, and should probably be 
> removed entirely.

Good.

In fact in the 4.1.2 that I built yesterday even QT_GUI_LIB seems to 
exist only in one place related to testing.

I've removed all trace of them and done a couple of test builds. All ok 
so far.

Attached is patch of reduced size.

JB
-------------- next part --------------
Index: Modules/FindQt4.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/FindQt4.cmake,v
retrieving revision 1.30
diff -u -r1.30 FindQt4.cmake
--- Modules/FindQt4.cmake	11 May 2006 14:41:42 -0000	1.30
+++ Modules/FindQt4.cmake	12 May 2006 16:33:30 -0000
@@ -165,12 +165,6 @@
 
 SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake)
 
-SET( QT_DEFINITIONS "")
-
-IF (WIN32)
-  SET(QT_DEFINITIONS -DQT_DLL)
-ENDIF(WIN32)
-
 # check for qmake
 FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
@@ -854,7 +848,23 @@
     SET(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
   ENDIF(UNIX)
 
-
+  #######################################
+  #
+  #       if Qt Static build on windows,
+  #
+  #######################################
+  IF (WIN32)
+    # if Qt was built as a static lib then don't set QT_DLL flag
+    IF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
+      FILE(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
+      IF(${QT_CORE_PRL} MATCHES "static")
+        SET(QT_STATIC 1)
+      ELSE(${QT_CORE_PRL} MATCHES "static")
+        SET(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_DLL)
+      ENDIF(${QT_CORE_PRL} MATCHES "static")
+    ENDIF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
+  ENDIF(WIN32)
+  
   #######################################
   #
   #       compatibility settings
Index: Modules/UseQt4.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/UseQt4.cmake,v
retrieving revision 1.4
diff -u -r1.4 UseQt4.cmake
--- Modules/UseQt4.cmake	27 Apr 2006 19:07:23 -0000	1.4
+++ Modules/UseQt4.cmake	12 May 2006 16:26:14 -0000
@@ -13,7 +13,6 @@
 IF (NOT QT_DONT_USE_QTCORE)
   IF (QT_QTCORE_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTCORE_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_CORE_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTCORE_LIBRARY}"
@@ -35,7 +34,6 @@
 IF (NOT QT_DONT_USE_QTGUI)
   IF (QT_QTGUI_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTGUI_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_GUI_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTGUI_LIBRARY}"
@@ -57,7 +55,6 @@
 IF (QT_USE_QT3SUPPORT)
   IF (QT_QT3SUPPORT_FOUND)
     INCLUDE_DIRECTORIES(${QT_QT3SUPPORT_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT3_SUPPORT)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QT3SUPPORT_LIBRARY}"
@@ -135,7 +132,6 @@
 IF (QT_USE_QTNETWORK)
   IF (QT_QTNETWORK_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTNETWORK_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_NETWORK_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTNETWORK_LIBRARY}"
@@ -168,7 +164,6 @@
 IF (QT_USE_QTOPENGL)
   IF (QT_QTOPENGL_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTOPENGL_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_OPENGL_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTOPENGL_LIBRARY}"
@@ -185,7 +180,6 @@
 IF (QT_USE_QTSQL)
   IF (QT_QTSQL_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTSQL_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_SQL_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTSQL_LIBRARY}"
@@ -202,7 +196,6 @@
 IF (QT_USE_QTXML)
   IF (QT_QTXML_FOUND)
     INCLUDE_DIRECTORIES(${QT_QTXML_INCLUDE_DIR})
-    ADD_DEFINITIONS(-DQT_XML_LIB)
     IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
       SET(QT_LIBRARIES ${QT_LIBRARIES}
         optimized "${QT_QTXML_LIBRARY}"


More information about the CMake mailing list