Browse Source

Add new qt4_use_modules function.

Stephen Kelly 13 years ago
parent
commit
1420691b35
2 changed files with 32 additions and 0 deletions
  1. 11 0
      Modules/FindQt4.cmake
  2. 21 0
      Modules/Qt4Macros.cmake

+ 11 - 0
Modules/FindQt4.cmake

@@ -163,6 +163,17 @@
 #        filenames can be found in qm_files. The ts_files
 #        must exists and are not updated in any way.
 #
+# function QT4_USE_MODULES( target [link_type] modules...)
+#        Make <target> use the <modules> from Qt. Using a Qt module means
+#        to link to the library, add the relevant include directories for the module,
+#        and add the relevant compiler defines for using the module.
+#        Modules are roughly equivalent to components of Qt4, so usage would be
+#        something like:
+#         qt4_use_modules(myexe Core Gui Declarative)
+#        to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument can
+#        be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the same argument
+#        to the target_link_libraries call.
+#
 #
 #  Below is a detailed list of variables that FindQt4.cmake sets.
 #  QT_FOUND         If false, don't try to use Qt.

+ 21 - 0
Modules/Qt4Macros.cmake

@@ -439,3 +439,24 @@ macro(QT4_ADD_TRANSLATION _qm_files)
     set(${_qm_files} ${${_qm_files}} ${qm})
   endforeach ()
 endmacro()
+
+function(qt4_use_modules _target _link_type)
+  if ("${_link_type}" STREQUAL "LINK_PUBLIC" OR "${_link_type}" STREQUAL "LINK_PRIVATE")
+    set(modules ${ARGN})
+    set(link_type ${_link_type})
+  else()
+    set(modules ${_link_type} ${ARGN})
+  endif()
+  foreach(_module ${modules})
+    string(TOUPPER ${_module} _ucmodule)
+    if (NOT QT_QT${_ucmodule}_FOUND)
+      message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
+    endif()
+    if ("${_ucmodule}" STREQUAL "MAIN")
+      message(FATAL_ERROR "Can not use \"${_module}\" module with qt4_use_modules.")
+    endif()
+    target_link_libraries(${_target} ${link_type} ${QT_QT${_ucmodule}_LIBRARY})
+    set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${QT_QT${_ucmodule}_INCLUDE_DIR} ${QT_HEADERS_DIR} ${QT_MKSPECS_DIR}/default)
+    set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${QT_QT${_ucmodule}_COMPILE_DEFINITIONS})
+  endforeach()
+endfunction()