diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/ECMQtFramework.cmake | 95 |
1 files changed, 88 insertions, 7 deletions
diff --git a/modules/ECMQtFramework.cmake b/modules/ECMQtFramework.cmake index 456a5571..8a1d0ae0 100644 --- a/modules/ECMQtFramework.cmake +++ b/modules/ECMQtFramework.cmake @@ -5,8 +5,88 @@ # if (QT4_FOUND) # message(SEND_ERROR "This file must be included before finding the Qt package.") # endif() - -cmake_policy(SET CMP0017 NEW) +#- Automatic configuration of a project as a Qt framework. +# +# This module can be used to simplify creation of quality frameworks written in Qt. +# It sets compiler flags, Qt definitions and CMake options which make sense to use when creating +# A Qt based framework. +# +# project(myspeciallib) +# ecm_framework_version(5 0 0) +# include(ECMQtFramework) +# +# This will set myspeciallib to be a Qt framework, that is, the name of the project is +# relevant and used (see below). The version of the project is 5.0.0. It is important to +# include ECMQtFramework before finding Qt itself. +# +# Specifically being an ECM Qt framework means: +# +# 1) The compiler is configured with export flags. With GCC and clang, this means enabling +# the -hidden-visibility flags. See the GenerateExportHeader module for more on generating +# and installing export headers. +# +# 2) A Coverage build type is created and made available in the cmake-gui. This means that +# running +# +# cmake $SRCDIR -DCMAKE_BUILD_TYPE=Coverage +# +# Will enable the use of the -fprofile-arcs -ftest-coverage flags on GCC. The Coverage type is also +# available through the cmake-gui program. +# +# 3) Sensible compiler warnings are enabled. These are the flags determined to be useful through +# a history in KDE buildsystem. +# +# 4) Qt build flags are defined. +# These include + +# * Disabling automatic ascii casts provided by Qt (so for example QLatin1String must be used). This is +# relevant to prevent encoding errors, and makes conversion to QString potentially faster or avoidable. +# +# * Disabling Qt keywords such as signals and slots so that Q_SIGNALS and Q_SLOTS must be used instead. This +# is relevant if using the framework together with boost signals. +# +# * Enabling the use of fast concatenation. This makes it possible to create strings from multiple pieces +# with one memory allocation. +# +# 5) CMake will use imported targets for Qt. This is relevant on windows because it is easier +# to build both debug and release versions of the framework. +# +# 6) CMake will include the current source and binary directories automatically while preprocessing. The +# source and binary directories of the current project will be used before others. +# +# 7) CMake will use built in automatic moc support. +# +# 8) A LIB_SUFFIX variable is made available. This is used to install libraries optionally +# to for example /lib64 instead of /lib +# +# 9) The ECM_TARGET_DEFAULT_ARGS variable is made available for use by targets in the framework. This is +# used in install(TARGETS) calls to install components of targets to the configured binary and library directories, +# to create an export target for the framework, and to put them in a component for use with CPack. The name of the +# component is the same as the argument to the project call (myspeciallib above). +# +# 10) The use of RPATH is enabled. (TODO RUNPATH?) +# +# 11) A CMake config file and config version are created and installed. The config file uses the project name so that: +# +# * The file is called myspeciallibConfig.cmake. A companion file myspeciallibVersionConfig is also created. +# +# * The variables myspeciallib_VERSION_MAJOR, myspeciallib_VERSION_MINOR, myspeciallib_VERSION_PATCH are defined +# as specified by the use of ecm_framework_version. +# +# * Standard variables are set for linking to the library and including the directories of its headers. +# +# 12) The targets file is installed. This means that myspeciallib can be used as an imported target. +# +# 13) A USE file is installed. This means that consumers of myspeciallib can +# +# include(${myspeciallib_USE_FILE}) +# +# which will include the Qt USE file, and add the header directories for myspeciallib to include_directories() +# +# 14) A version file is created called myspeciallib_version.h, which contains version information usable by +# the preprocessor. The version file must be installed by the user. +# +# 15) The FeatureSummary module is included. include(FeatureSummary) include(GenerateExportHeader) @@ -34,11 +114,6 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() endif() -# Tell FindQt4.cmake to point the QT_QTFOO_LIBRARY targets at the imported targets -# for the Qt libraries, so we get full handling of release and debug versions of the -# Qt libs and are flexible regarding the install location of Qt under Windows -set(QT_USE_IMPORTED_TARGETS TRUE) - add_definitions(-DQT_NO_CAST_TO_ASCII) add_definitions(-DQT_NO_CAST_FROM_ASCII) add_definitions(-DQT_STRICT_ITERATORS) @@ -48,6 +123,12 @@ add_definitions(-DQT_NO_KEYWORDS) add_definitions(-DQT_USE_FAST_CONCATENATION) add_definitions(-DQT_USE_FAST_OPERATOR_PLUS) + +# Tell FindQt4.cmake to point the QT_QTFOO_LIBRARY targets at the imported targets +# for the Qt libraries, so we get full handling of release and debug versions of the +# Qt libs and are flexible regarding the install location of Qt under Windows +set(QT_USE_IMPORTED_TARGETS TRUE) + # Always include the source and build directories in the include path # to save doing so manually in every subdirectory. set(CMAKE_INCLUDE_CURRENT_DIR ON) |