-
Sze Howe Koh authored
- Fix Qt X11 Extras option - Fix Active Qt link - Reduce verbosity - Mark relevant modules as deprecated - The QtDeclarative library's corresponding module name is Qt Quick 1 Change-Id: I5e0d439ff2623563ab57c354337cddfd11179b50 Reviewed-by:
Oswald Buddenhagen <oswald.buddenhagen@digia.com>
4fbf696c
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\page qmake-manual.html
\title qmake Manual
\startpage {index.html}{Qt Reference Documentation}
\nextpage Overview
\ingroup qttools
\keyword qmake
The qmake tool helps simplify the build process for development projects
across different platforms. It automates the generation of Makefiles so that
only a few lines of information are needed to create each Makefile.
You can use qmake for any software project, whether it is written with Qt or
not.
qmake generates a Makefile based on the information in a
project file. Project files are created by the developer, and are usually
simple, but more sophisticated project files can be created for complex
projects.
qmake contains additional features to support development
with Qt, automatically including build rules for \l{moc.html}{moc}
and \l{uic.html}{uic}.
qmake can also generate projects for Microsoft Visual studio
without requiring the developer to change the project file.
\section1 Table of Contents
\list
\li \l{Overview}
\li \l{Getting Started}
\li \l{Creating Project Files}
\li \l{Building Common Project Types}
\li \l{Running qmake}
\li \l{Platform Notes}
\li \l{qmake Language}
\li \l{Advanced Usage}
\li \l{Using Precompiled Headers}
\li \l{Configuring qmake}
\li \l{Reference}
\list
\li \l{Variables}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
\li \l{Replace Functions}
\list
\li \l{Built-in Replace Functions}
\endlist
\li \l{Test Functions}
\list
\li \l{Built-in Test Functions}
\li \l{Test Function Library}
\endlist
\endlist
\endlist
*/
/*!
\page qmake-overview.html
\title Overview
\contentspage {qmake Manual}{Contents}
\previouspage qmake Manual
\nextpage Getting Started
The qmake tool provides you with a project-oriented system for managing the
build process for applications, libraries, and other components.
This approach gives you control over the source files used, and
allows each of the steps in the process to be described concisely,
typically within a single file. qmake expands
the information in each project file to a Makefile that executes the necessary
commands for compiling and linking.
\section1 Describing a Project
Projects are described by the contents of project (\c .pro) files. qmake
uses the information within the files to generate Makefiles that contain
all the commands that are needed to build each project.
Project files typically contain a list of source and header files,
general configuration information, and any application-specific details,
such as a list of extra libraries to link against, or a list of extra
include paths to use.
Project files can contain a number of different elements, including
comments, variable declarations, built-in functions, and some simple
control structures. In most simple projects, it is only necessary
to declare the source and header files that are used to build the
project with some basic configuration options. For more information about
how to create a simple project file, see \l{Getting Started}.
You can create more sophisticated project files for complex projects. For an
overview of project files, see \l{Creating Project Files}. For detailed
information about the variables and functions that you can use in project
files, see \l{Reference}.
You can use application or library project templates to specify specialized
configuration options to fine tune the build process. For more information,
see \l{Building Common Project Types}.
You can use the \l{external: Qt Creator Manual}{Qt Creator} new project
wizard to create the project file. You choose the project template, and Qt
Creator creates a project file with default values that enable you to build
and run the project. You can modify the project file to suit your purposes.
You can also use qmake to generate project files. For a full description of
qmake command line options, see \l{Running qmake}.
The basic configuration features of qmake can handle most cross-platform
projects. However, it might be useful, or even necessary, to use some
platform-specific variables. For more information, see \l{Platform Notes}.
\section1 Building a Project
For simple projects, you only need to run qmake in the top level directory
of your project to generate a Makefile. You can then run your platform's
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
\c make tool to build the project according to the Makefile.
For more information about the environment variables that qmake uses when
configuring the build process, see \l{Configuring qmake}.
\section1 Using Third Party Libraries
The guide to \l{Third Party Libraries} shows you how to use simple third
party libraries in your Qt project.
\section1 Precompiling Headers
In large projects, it is possible to take advantage of precompiled
header files to speed up the build process. For more information, see
\l{Using Precompiled Headers}.
*/
/*!
\page qmake-project-files.html
\title Creating Project Files
\contentspage {qmake Manual}{Contents}
\previouspage Getting Started
\nextpage Building Common Project Types
Project files contain all the information required by qmake to build your
application, library, or plugin. Generally, you use a series of declarations
to specify the resources in the project, but support for simple programming
constructs enables you to describe different build processes for different
platforms and environments.
\section1 Project File Elements
The project file format used by qmake can be
used to support both simple and fairly complex build systems.
Simple project files use a straightforward declarative style,
defining standard variables to indicate the source and header files
that are used in the project. Complex projects may use control flow
structures to fine-tune the build process.
The following sections describe the different types of elements used
in project files.
\target ProjectFileElementsVariables
\section2 Variables
In a project file, variables are used to hold lists of strings. In the
simplest projects, these variables inform qmake
about the configuration options to use, or supply filenames and paths to
use in the build process.
qmake looks for certain variables in each
project file, and it uses the contents of these to determine what it
should write to a Makefile. For example, the lists of values in the
\l{HEADERS} and \l{SOURCES} variables are used to tell qmake about header
and source files in the same directory as the project file.
Variables can also be used internally to store temporary lists of values,
and existing lists of values can be overwritten or extended with new
values.
The following snippet illustrates how lists of values are assigned to
variables:
\snippet doc/src/snippets/qmake/variables.pro 0
The list of values in a variable is extended in the following way:
\snippet doc/src/snippets/qmake/variables.pro 1
\note The first assignment only includes values that are specified on
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
the same line as the \c HEADERS variable. The second assignment splits
the values in the \c SOURCES variable across lines by using a backslash
(\\).
The \l{CONFIG} variable is another special variable that qmake uses when
generating a Makefile. It is discussed in \l{General Configuration}.
In the snippet above, \c console is added to the list of existing values
contained in \c CONFIG.
The following table lists some frequently used variables and describes their
contents. For a full list of variables and their descriptions,
see \l{Variables}.
\table
\header \li Variable \li Contents
\row \li \l{CONFIG} \li General project configuration options.
\row \li \l{DESTDIR} \li The directory in which the executable or binary file will
be placed.
\row \li \l{FORMS} \li A list of UI files to be processed by the
\l{uic}{user interface compiler (uic)}.
\row \li \l{HEADERS} \li A list of filenames of header (.h) files used when
building the project.
\row \li \l{Variables#QT}{QT} \li A list of Qt modules used in the project.
\row \li \l{RESOURCES} \li A list of resource (.qrc) files to be included in the
final project. See the \l{The Qt Resource System} for
more information about these files.
\row \li \l{SOURCES} \li A list of source code files to be used when building
the project.
\row \li \l{TEMPLATE} \li The template to use for the project. This determines
whether the output of the build process will be an
application, a library, or a plugin.
\endtable
The contents of a variable can be read by prepending the variable name with
\c $$. This can be used to assign the contents of one variable to another:
\snippet doc/src/snippets/qmake/dereferencing.pro 0
The \c $$ operator is used extensively with built-in functions that operate
on strings and lists of values. For more information, see
\l{qmake Language}.
\section3 Whitespace
Usually, whitespace separates values in variable assignments. To specify
values that contain spaces, you must enclose the values in double quotes:
\snippet doc/src/snippets/qmake/quoting.pro 0
The quoted text is treated as a single item in the list of values held by
the variable. A similar approach is used to deal with paths that contain
spaces, particularly when defining the
\l{INCLUDEPATH} and \l{LIBS} variables for the Windows platform:
\snippet doc/src/snippets/qmake/spaces.pro quoting include paths with spaces
\section2 Comments
You can add comments to project files. Comments begin with the \c
# character and continue to the end of the same line. For example:
\snippet doc/src/snippets/qmake/comments.pro 0
To include the \c # character in variable assignments, it is necessary
to use the contents of the built-in \l{LITERAL_HASH} variable.
\section2 Built-in Functions and Control Flow
qmake provides a number of built-in functions to enable the contents of
variables to be processed. The most commonly used function in simple
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
project files is the \l{include(filename)}{include()} function which takes a
filename as an
argument. The contents of the given file are included in the project
file at the place where the \c include function is used.
The \c include function is most commonly used to include other project
files:
\snippet doc/src/snippets/qmake/include.pro 0
Support for conditional structures is made available via
\l{Scopes}{scopes} that behave like \c if statements in programming languages:
\snippet doc/src/snippets/qmake/scopes.pro 0
The assignments inside the braces are only made if the condition is
true. In this case, the \c win32 \l{CONFIG} option must be set. This
happens automatically on Windows. The opening brace must stand on the same
line as the condition.
More complex operations on variables that would usually require loops
are provided by built-in functions such as \l{findfunction}{find()},
\l{unique}{unique()}, and \l{countfunction}{count()}. These functions, and
many others are provided to manipulate
strings and paths, support user input, and call external tools. For more
information about using the functions, see \l{qmake Language}. For lists
of all functions and their descriptions, see \l{Replace Functions} and
\l{Test Functions}.
\section1 Project Templates
The \l{TEMPLATE} variable is used to define the type of project that will
be built. If this is not declared in the project file,
qmake assumes that an application should be
built, and will generate an appropriate Makefile (or equivalent file)
for the purpose.
The following table summarizes the types of projects available and describes
the files that qmake will generate for each of them:
\table
\header \li Template \li qmake Output
\row \li app (default) \li Makefile to build an application.
\row \li lib \li Makefile to build a library.
\row \li subdirs \li Makefile containing rules for the
subdirectories specified using the \l{SUBDIRS}
variable. Each subdirectory must contain its own project file.
\row \li vcapp \li Visual Studio Project file to build
an application.
\row \li vclib \li Visual Studio Project file to build a library.
\row \li vcsubdirs \li Visual Studio Solution file to build
projects in sub-directories.
\endtable
See \l{Building Common Project Types} for advice on writing project files for
projects that use the \c app and \c lib templates.
When the \c subdirs template is used, qmake
generates a Makefile to examine each specified subdirectory,
process any project file it finds there, and run the platform's
\c make tool on the newly-created Makefile.
The \c SUBDIRS variable is used to
contain a list of all the subdirectories to be processed.
\target GeneralConfiguration
\section1 General Configuration
The \l{CONFIG} variable specifies the options and features that the project
should be configured with.
The project can be built in \e release mode or \e debug mode, or both.
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
If debug and release are both specified, the last one takes effect. If you
specify the \c debug_and_release option to build both the debug and release
versions of a project, the Makefile that qmake generates includes a rule
that builds both versions. This can be invoked in the following way:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 0
Adding the \c build_all option to the \c CONFIG variable makes this rule
the default when building the project.
\note Each of the options specified in the \c CONFIG variable can also be
used as a scope condition.
You can test for the presence of certain configuration options by using the
built-in \l{CONFIG(config)}{CONFIG()} function.
For example, the following lines show the function as the condition in a scope
to test whether only the \c opengl option is in use:
\snippet doc/src/snippets/qmake/configscopes.pro 4
\snippet doc/src/snippets/qmake/configscopes.pro 5
This enables different configurations to be defined for \c release and
\c debug builds. For more information, see \l{Scopes}{Using Scopes}.
The following options define the type of project to be built.
\note Some of these options only take effect when used on the relevant
platform.
\table
\header \li Option \li Description
\row \li qt \li The project is a Qt application and should link against the Qt
library. You can use the \c QT variable to control any additional
Qt modules that are required by your application.
This value is added by default, but you can remove it to
use qmake for a non-Qt project.
\row \li x11 \li The project is an X11 application or library.
This value is not needed if the target uses Qt.
\endtable
The \l{TEMPLATE}{application and library project templates} provide you with
more specialized configuration options to fine tune the build process. The
options are explained in detail in \l{Building Common Project Types}.
For example, if your application uses the Qt library and you want to
build it in \c debug mode, your project file will contain the following line:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 1
\note You must use "+=", not "=", or qmake
will not be able to use Qt's configuration to determine the settings
needed for your project.
\section1 Declaring Qt Libraries
If the \l{CONFIG} variable contains the \c qt value, qmake's support for Qt
applications is enabled. This makes it possible to fine-tune which of the
Qt modules are used by your application. This is achieved with the
\l{Variables#QT}{QT} variable which can be used to declare the required
extension modules.
For example, we can enable the XML and network modules in the following way:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 2
\note \c QT includes the \c core and \c gui modules by default, so the
above declaration \e adds the network and XML modules to this default list.
The following assignment \e omits the default modules, and will lead to
errors when the application's source code is being compiled:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 3
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
If you want to build a project \e without the \c gui module, you need to
exclude it with the "-=" operator. By default, \c QT contains both
\c core and \c gui, so the following line will result in a minimal
Qt project being built:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 4
For a list of Qt modules that you can add to the \c QT variable, see
\l{Variables#QT}{QT}.
\section1 Configuration Features
qmake can be set up with extra configuration
features that are specified in feature (.prf) files. These extra features
often provide support for custom tools that are used during the build
process. To add a feature to the build process, append the feature name
(the stem of the feature filename) to the \c CONFIG variable.
For example, qmake can configure the build
process to take advantage of external libraries that are supported by
\l{http://www.freedesktop.org/wiki/Software/pkg-config}{pkg-config},
such as the D-Bus and ogg libraries, with the following lines:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 5
For more information about adding features, see
\l{Adding New Configuration Features}.
\section1 Declaring Other Libraries
If you are using other libraries in your project in addition to those
supplied with Qt, you need to specify them in your project file.
The paths that qmake searches for libraries
and the specific libraries to link against can be added to the list of values in the
\l{LIBS} variable. You can specify the paths to the libraries or use the
Unix-style notation for specifying libraries and paths.
For example, the following lines show how a library can be specified:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 6
The paths containing header files can also be specified in a similar way
using the \l{INCLUDEPATH} variable.
For example, to add several paths to be searched for header files:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 7
*/
/*!
\page qmake-running.html
\title Running qmake
\contentspage {qmake Manual}{Contents}
\previouspage Building Common Project Types
\nextpage Platform Notes
The behavior of qmake can be customized when it
is run by specifying various options on the command line. These allow the
build process to be fine-tuned, provide useful diagnostic
information, and can be used to specify the target platform for
your project.
\section1 Command Syntax
The syntax used to run qmake takes the following simple form:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 8
\section1 Operating Modes
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
qmake supports two different modes of operation. In the default mode, qmake
uses the information in a project file to generate a Makefile, but it is also
possible to use qmake to generate project files.
If you want to explicitly set the mode, you must specify it before all
other options. The \c mode can be either of the following two values:
\list
\li \c -makefile \BR
qmake output will be a Makefile.
\li \c -project \BR
qmake output will be a project file. \BR
\note It is likely that the created file will need to be edited. For example,
adding the \c QT variable to suit what modules are required for the project.
\endlist
You can use the \c options to specify both general and mode-specific
settings. Options that only apply to the Makefile mode are described in the
\l{#MakefileMode}{Makefile Mode Options} section, whereas options that influence the
creation of project files are described in the
\l{#ProjectMode}{Project Mode Options} section.
\section1 Files
The \c files argument represents a list of one or more project files, separated
by spaces.
\section1 General Options
A wide range of options can be specified on the command line to
qmake in order to customize the build process,
and to override default settings for your platform. The following basic
options provide help on using qmake, specify where qmake writes the output
file, and control the
level of debugging information that will be written to the console:
\list
\li \c -help \BR
qmake will go over these features and give some useful help.
\li \c {-o file} \BR
qmake output will be directed to \c file. If
this option is not specified, qmake will try
to use a suitable file name for its output, depending on the mode it is
running in.\BR
If '-' is specified, output is directed to stdout.
\li \c -d \BR
qmake will output debugging information. Adding \c -d more than once
increases verbosity.
\endlist
The template used for the project is usually specified by the \l{TEMPLATE}
variable in the project file. You can override or modify this by using the
following options:
\list
\li \c {-t tmpl} \BR
qmake will override any set \c TEMPLATE variables with \c tmpl, but only
\e after the .pro file has been processed.
\li \c {-tp prefix} \BR
qmake will add \c prefix to the \c TEMPLATE variable.
\endlist
The level of warning information can be fine-tuned to help you find problems in
your project file:
\list
\li \c -Wall \BR
qmake will report all known warnings.
\li \c -Wnone \BR
No warning information will be generated by qmake.
561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
\li \c -Wparser \BR
qmake will only generate parser warnings.
This will alert you to common pitfalls and potential problems in the
parsing of your project files.
\li \c -Wlogic \BR
qmake will warn of common pitfalls and
potential problems in your project file. For example,
qmake will report multiple occurrences of files in lists and missing
files.
\endlist
\target MakefileMode
\section1 Makefile Mode Options
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 9
In Makefile mode, qmake will generate a Makefile
that is used to build the project. Additionally, the following options may
be used in this mode to influence the way the project file is generated:
\list
\li \c -after \BR
qmake will process assignments given on the
command line after the specified files.
\li \c -nocache \BR
qmake will ignore the \c{.qmake.cache} file.
\li \c -nodepend \BR
qmake will not generate any dependency
information.
\li \c {-cache file} \BR
qmake will use \c file as the cache file,
ignoring any other .qmake.cache files found.
\li \c {-spec spec} \BR
qmake will use \c spec as a path to platform and compiler information,
and ignore the value of \l{QMAKESPEC}.
\endlist
You may also pass qmake assignments on the command line. They are processed
before all of the files specified. For example, the following command
generates a Makefile from test.pro:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 10
However, some of the specified options can be omitted as they are default
values:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 11
If you are certain you want your variables processed after the
files specified, then you may pass the \c -after option. When this
is specified, all assignments on the command line after the \c -after
option will be postponed until after the specified files are parsed.
\target ProjectMode
\section1 Project Mode Options
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 12
In project mode, qmake will generate a project
file. Additionally, you may supply the following options in this mode:
\list
\li \c -r \BR
qmake will look through supplied directories recursively.
\li \c -nopwd \BR
qmake will not look in your current working directory for source code.
It will only use the specified \c files.
\endlist
In this mode, the \c files argument can be a list of files or directories.
631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
If a directory is specified, it will be included in the \l{DEPENDPATH}
variable, and relevant code from there will be included in the generated
project file. If a file is given, it will be appended to the correct
variable, depending on its extension. For example, UI files are added
to \l{FORMS}, and C++ files are added to \l{SOURCES}.
You may also pass assignments on the command line in this mode. When doing
so, these assignments will be placed last in the generated project file.
*/
/*!
\page qmake-platform-notes.html
\title Platform Notes
\contentspage {qmake Manual}{Contents}
\previouspage Running qmake
\nextpage qmake Language
Many cross-platform projects can be handled by the basic qmake configuration
features. However, on some platforms, it is sometimes useful, or even
necessary, to take advantage of platform-specific features.
qmake knows about many of these features, which can be accessed via specific
variables that only take effect on the platforms where they are relevant.
\section1 Mac OS X
Features specific to this platform include support for creating universal
binaries, frameworks and bundles.
\section2 Source and Binary Packages
The version of qmake supplied in source packages
is configured slightly differently to that supplied in binary packages in
that it uses a different feature specification. Where the source package
typically uses the \c macx-g++ specification, the binary package is
typically configured to use the \c macx-xcode specification.
Users of each package can override this configuration by invoking
qmake with the \c -spec option (see \l{Running qmake} for more information).
For example, to use qmake from a binary package to create a Makefile in a
project directory, invoke the following command:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 13
\section2 Using Frameworks
qmake is able to automatically generate build
rules for linking against frameworks in the standard framework directory on
Mac OS X, located at \c{/Library/Frameworks/}.
Directories other than the standard framework directory need to be specified
to the build system, and this is achieved by appending linker options to the
\l{QMAKE_LFLAGS} variable, as shown in the following example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 14
The framework itself is linked in by appending the \c{-framework} options and
the name of the framework to the \l{LIBS} variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 15
\section2 Creating Frameworks
Any given library project can be configured so that the resulting library
file is placed in a
\l{http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html}
{framework}, ready for deployment. To do this, set up the project to use the
\l{TEMPLATE}{\c lib template} and add the \c lib_bundle option to the
\l{CONFIG} variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 16
701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
The data associated with the library is specified using the
\l{QMAKE_BUNDLE_DATA}
variable. This holds items that will be installed with a library
bundle, and is often used to specify a collection of header files,
as in the following example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 17
You use the \c FRAMEWORK_HEADERS variable to specify the headers required by
a particular framework.
Appending it to the \c QMAKE_BUNDLE_DATA variable ensures that
information about these headers is added to the collection of
resources that will be installed with the library bundle. Also, the
framework name and version are specified by the \l {QMAKE_FRAMEWORK_BUNDLE_NAME}
and \l{QMAKE_FRAMEWORK_VERSION} variables. By default, the values used for
these variables are obtained from the \l{TARGET} and \l{VERSION} variables.
See \l{Deploying an Application on Mac OS X} for more information about
deploying applications and libraries.
\section2 Creating and Moving Xcode Projects
Developers on Mac OS X can take advantage of the qmake support for Xcode
project files, as described in
\l{Qt is Mac OS X Native#Development Tools}{Qt is Mac OS X Native},
by running qmake to generate an Xcode project from an existing qmake project
file. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 19
\note If a project is later moved on the disk, qmake must be run again to
process the project file and create a new Xcode project file.
\section2 Supporting Two Build Targets Simultaneously
Implementing this is currently not feasible, because the Xcode
concept of Active Build Configurations is conceptually different
from the qmake idea of build targets.
The Xcode Active Build Configurations settings are for modifying
Xcode configurations, compiler flags and similar build
options. Unlike Visual Studio, Xcode does not allow for the
selection of specific library files based on whether debug or
release build configurations are selected. The qmake debug and
release settings control which library files are linked to the
executable.
It is currently not possible to set files in Xcode configuration
settings from the qmake generated Xcode project file. The way the
libraries are linked in the \e {Frameworks & Libraries} phase in the
Xcode build system.
Furthermore, the selected \e {Active Build Configuration} is stored
in a .pbxuser file, which is generated by Xcode on first load, not
created by qmake.
\section1 Windows
Features specific to this platform include support for creating Visual
Studio project files and handling manifest files when deploying Qt
applications developed using Visual Studio 2005, or later.
\section2 Creating Visual Studio Project Files
Developers using Visual Studio to write Qt applications can use the
Visual Studio integration facilities provided with the
\l{Qt Commercial License}
and do not need to worry about how project dependencies are managed.
771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
However, some developers may need to import an existing
qmake project into Visual Studio.
qmake is able to take a project file and create
a Visual Studio project that contains all the necessary information
required by the development environment. This is achieved by setting the
qmake \l{TEMPLATE}{project template} to either \c vcapp
(for application projects) or \c vclib (for library projects).
This can also be set using a command line option, for example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 20
It is possible to recursively generate \c{.vcproj} files in subdirectories
and a \c{.sln} file in the main directory, by typing:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 21
Each time you update the project file, you need to run
qmake to generate an updated Visual Studio
project.
\note If you are using the Visual Studio Add-in, select \gui Qt >
\gui{Import from .pro file} to import \c .pro files.
\section2 Visual Studio Manifest Files
When deploying Qt applications built using Visual Studio 2005, or later,
make sure that the manifest file that was created when the application
was linked is handled correctly. This is handled automatically for
projects that generate DLLs.
Removing manifest embedding for application executables can be done with
the following assignment to the \l{CONFIG} variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 22
Also, the manifest embedding for DLLs can be removed with the following
assignment to the \c CONFIG variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 23
This is discussed in more detail in the
\l{Deploying an Application on Windows#Manifest files}
{deployment guide for Windows}.
*/
/*!
\page qmake-reference.html
\title Reference
\contentspage {qmake Manual}{Contents}
\previouspage Configuring qmake
\nextpage Variables
The reference sections describe in detail the variables and functions that
are available for use in qmake project files.
\section1 Variable Reference
\l{Variables} describes the variables that are recognized by qmake when
configuring the build process for projects.
\section1 Function Reference
There are two types of qmake functions: replace functions and test
functions. Replace functions return a value list, while test functions
return a boolean result. The functions are implemented in two places:
fundamental functionality is offered as built-in functions. More complex
functions are implemented in a library of feature files (.prf).
The functions are divided into categories according to their type:
841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
\list
\li \l{Replace Functions}
\li \l{Test Functions}
\endlist
*/
/*!
\page qmake-variable-reference.html
\title Variables
\contentspage {qmake Manual}{Contents}
\previouspage Reference
\nextpage Replace Functions
The fundamental behavior of qmake is influenced by variable declarations that
define the build process of each project. Some of these declare resources,
such as headers and source files, that are common to each platform. Others
are used to customize the behavior of compilers and linkers on specific
platforms.
Platform-specific variables follow the naming pattern of the
variables which they extend or modify, but include the name of the relevant
platform in their name. For example, \c QMAKE_LIBS can be used to specify a list
of libraries that a project needs to link against, and \c QMAKE_LIBS_X11 can be
used to extend or override this list.
\target CONFIG
\section1 CONFIG
Specifies project configuration and compiler options. The values are
recognized internally by qmake and have special meaning.
The following \c CONFIG values control compilation flags:
\table
\header \li Option \li Description
\row \li release \li The project is to be built in release mode.
If \c debug is also specified, the last one takes effect.
\row \li debug \li The project is to be built in debug mode.
\row \li debug_and_release \li The project is prepared to be built in
\e both debug and release modes.
\row \li debug_and_release_target \li This option is set by default. If
\c debug_and_release is also set, the debug and release builds
end up in separate debug and release directories.
\row \li build_all \li If \c debug_and_release is specified, the project is
built in both debug and release modes by default.
\row \li autogen_precompile_source \li Automatically generates a \c .cpp
file that includes the precompiled header file specified in the .pro
file.
\row \li ordered \li When using the \c subdirs template, this option
specifies that the directories listed should be processed in the
order in which they are given.
\row \li precompile_header \li Enables support for the use of
\l{Using Precompiled Headers}{precompiled headers} in projects.
\row \li warn_on \li The compiler should output as many warnings as possible.
If \c warn_off is also specified, the last one takes effect.
\row \li warn_off \li The compiler should output as few warnings as possible.
\row \li exceptions \li Exception support is enabled. Set by default.
\row \li exceptions_off \li Exception support is disabled.
\row \li rtti \li RTTI support is enabled. By default, the compiler
default is used.
\row \li rtti_off \li RTTI support is disabled. By default, the compiler
default is used.
\row \li stl \li STL support is enabled. By default, the compiler
default is used.
\row \li stl_off \li STL support is disabled. By default, the compiler
default is used.
\row \li thread \li Thread support is enabled. This is enabled when CONFIG
includes \c qt, which is the default.
\endtable
911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980
Since the \c debug option overrides the \c release option when both are
defined in the \c CONFIG variable, it is necessary to use the
\c debug_and_release option if you want to allow both debug and release
versions of a project to be built. In such a case, the Makefile that
qmake generates includes a rule that builds both
versions, and this can be invoked in the following way:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 24
When linking a library, qmake relies on the
underlying platform to know what other libraries this library links
against. However, if linking statically, qmake
will not get this information unless we use the following \c CONFIG
options:
\table
\header \li Option \li Description
\row \li create_prl \li This option enables
qmake to track these dependencies. When this
option is enabled, qmake will create a file
with the extension \c .prl which will save meta-information about the library
(see \l{LibDepend}{Library Dependencies} for more info).
\row \li link_prl \li When this option is enabled,
qmake will process all libraries linked to
by the application and find their meta-information (see
\l{LibDepend}{Library Dependencies} for more info).
\endtable
\note The \c create_prl option is required when \e {building} a
static library, while \c link_prl is required when \e {using} a
static library.
On Windows (or if Qt is configured with \c{-debug-and-release}), add the
\c build_all option to the \c CONFIG variable to build all build
configurations by default.
Additionally, adding \c debug_and_release to the \c CONFIG variable will
cause both \c debug and \c release to be defined in the contents of
\c CONFIG. When the project file is processed, the
\l{Scopes}{scopes} that test for each value will be
processed for \e both debug and release modes. The \c{build_pass} variable
will be set for each of these modes, and you can test for this to perform
build-specific tasks. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 25
As a result, it may be useful to define mode-specific variables, such as
\l{#QMAKE_LFLAGS_RELEASE}{QMAKE_LFLAGS_RELEASE}, instead of general
variables, such as \l{#QMAKE_LFLAGS}{QMAKE_LFLAGS}, where possible.
The following options define the application or library type:
\table
\header \li Option \li Description
\row \li qt \li The target is a Qt application or library and requires the Qt
library and header files. The proper include and library paths for the
Qt library will automatically be added to the project. This is defined
by default, and can be fine-tuned with the \c{\l{#qt}{QT}} variable.
\row \li thread \li The target is a multi-threaded application or library. The
proper defines and compiler flags will automatically be added to
the project. This value is set by default.
\row \li x11 \li The target is a X11 application or library. The proper
include paths and libraries will automatically be added to the
project.
\row \li testcase \li The target is an automated test.
\l{Building Common Project Types#building-a-testcase}{A check target} will be added
to the generated Makefile to run the test. Only relevant when generating
Makefiles.
\row \li insignificant_test \li The exit code of the automated test will be ignored.
981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
Only relevant if \c testcase is also set.
\row \li windows \li The target is a Win32 window application (app only). The
proper include paths, compiler flags and libraries will
automatically be added to the project.
\row \li console \li The target is a Win32 console application (app only). The
proper include paths, compiler flags and libraries will
automatically be added to the project.
\row \li shared \li{1,2} The target is a shared object/DLL. The proper
include paths, compiler flags and libraries will automatically be
added to the project. Note that \c dll can also be used on all platforms;
a shared library file with the appropriate suffix for the target platform
(.dll or .so) will be created.
\row \li dll
\row \li static \li{1,2} The target is a static library (lib only). The proper
compiler flags will automatically be added to the project.
\row \li staticlib
\row \li plugin \li The target is a plugin (lib only). This enables dll as well.
\row \li designer \li The target is a plugin for \QD.
\row \li no_lflags_merge \li Ensures that the list of libraries stored in the
\c LIBS variable is not reduced to a list of unique values before it is used.
\row \li resources \li Configures qmake to run rcc on the content of \c RESOURCES
if defined.
\endtable
These options define specific features on Windows only:
\table
\header \li Option \li Description
\row \li flat \li When using the vcapp template this will put all the source
files into the source group and the header files into the header group
regardless of what directory they reside in. Turning this
option off will group the files within the source/header group depending
on the directory they reside. This is turned on by default.
\row \li embed_manifest_dll \li Embeds a manifest file in the DLL created
as part of a library project.
\row \li embed_manifest_exe \li Embeds a manifest file in the DLL created
as part of an application project.
\row \li incremental \li Used to enable or disable incremental linking in Visual
C++, depending on whether this feature is enabled or disabled by default.
\endtable
See \l{Platform Notes#Visual Studio Manifest Files}{Platform Notes}
for more information about the options for embedding manifest files.
The following options take an effect only on Mac OS X:
\table
\header \li Option \li Description
\row \li ppc \li Builds a PowerPC binary.
\row \li x86 \li Builds an i386 compatible binary.
\row \li app_bundle \li Puts the executable into a bundle (this is the default).
\row \li lib_bundle \li Puts the library into a library bundle.
\endtable
The build process for bundles is also influenced by
the contents of the \l{#QMAKE_BUNDLE_DATA}{QMAKE_BUNDLE_DATA} variable.
The following options take an effect only on Linux/Unix platforms:
\table
\header \li Option \li Description
\row \li largefile \li Includes support for large files.
\row \li separate_debug_info \li Puts debugging information for libraries in
separate files.
\endtable
The \c CONFIG variable will also be checked when resolving scopes. You may
assign anything to this variable.
For example:
1051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 26
\target DEFINES
\section1 DEFINES
qmake adds the values of this variable as
compiler C preprocessor macros (-D option).
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 27
\target DEF_FILE
\section1 DEF_FILE
\note This variable is used only on Windows when using the \c app template.
Specifies a \c .def file to be included in the project.
\target DEPENDPATH
\section1 DEPENDPATH
Specifies a list of all directories to look in to resolve dependencies. This
variable is used when crawling through \c included files.
\target DEPLOYMENT
\section1 DEPLOYMENT
\note This variable is used only on the Windows CE platform.
Specifies which additional files will be deployed. Deployment means the
transfer of files from the development system to the target device or
emulator.
Files can be deployed by either creating a Visual Studio project or using
the \l {Using Qt Test remotely on Windows CE}{cetest} executable.
For example, the following definition uploads all PNG images in \c path to
the directory where the build target is deployed:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 28
The default deployment target path for Windows CE is
\c{%CSIDL_PROGRAM_FILES%\target}, which usually gets expanded to
\c{\Program Files\target}.
It is also possible to specify multiple \c sources to be deployed on
target \c paths. In addition, different variables can be used for
deployment to different directories.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 29
\note In Windows CE all linked Qt libraries will be deployed to the path
specified by \c{myFiles.path}.
\target DEPLOYMENT_PLUGIN
\section1 DEPLOYMENT_PLUGIN
\note This variable is used only on the Windows CE platform.
Specifies the Qt plugins that will be deployed. All plugins
available in Qt can be explicitly deployed to the device. See
\l{Static Plugins}{Static Plugins} for a complete list.
\note No plugins will be deployed automatically to Windows CE devices.
If the application depends on plugins, these plugins have to be specified
manually.
1121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190
For example, the following definition uploads the jpeg imageformat plugin to
the plugins directory on the Windows CE device:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 142
\target DESTDIR
\section1 DESTDIR
Specifies where to put the \l{#TARGET}{target} file.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 30
\target DISTFILES
\section1 DISTFILES
Specifies a list of files to be included in the dist
target. This feature is supported by UnixMake specs only.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 31
\target DLLDESTDIR
\section1 DLLDESTDIR
\note This variable applies only to Windows targets.
Specifies where to copy the \l{#TARGET}{target} dll.
\target FORMS
\section1 FORMS
Specifies the UI files (see \l{Qt Designer Manual}) to be processed by \c uic
before compiling. All dependencies, headers and source files required
to build these UI files will automatically be added to the project.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 32
\target GUID
\section1 GUID
Specifies the GUID that is set inside a \c{.vcproj} file. The GUID is
usually randomly determined. However, should you require a fixed GUID,
it can be set using this variable.
This variable is specific to \c{.vcproj} files only; it is ignored
otherwise.
\target HEADERS
\section1 HEADERS
Defines the header files for the project.
qmake automatically detects whether \l{moc} is required by the classes in
the headers, and adds the appropriate dependencies and files to the project
for generating and linking the moc files.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 34
See also \l{#SOURCES}{SOURCES}.
\target ICON
\section1 ICON
1191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260
This variable is used only on Mac OS to set the application icon.
Please see \l{Setting the Application Icon}{the application icon documentation}
for more information.
\target INCLUDEPATH
\section1 INCLUDEPATH
Specifies the #include directories which should be
searched when compiling the project.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 35
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
\snippet doc/src/snippets/qmake/spaces.pro quoting include paths with spaces
\target INSTALLS
\section1 INSTALLS
Specifies a list of resources that will be installed when
\c{make install} or a similar installation procedure is executed. Each
item in the list is typically defined with attributes that provide
information about where it will be installed.
For example, the following \c{target.path} definition describes where the
build target will be installed, and the \c INSTALLS assignment adds the
build target to the list of existing resources to be installed:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 36
For more information, see \l{Installing Files}.
\target LEXIMPLS
\section1 LEXIMPLS
Specifies a list of Lex implementation files. The value
of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target LEXOBJECTS
\section1 LEXOBJECTS
Specifies the names of intermediate Lex object
files.The value of this variable is typically handled by
qmake and rarely needs to be modified.
\target LEXSOURCES
\section1 LEXSOURCES
Specifies a list of Lex source files. All
dependencies, headers and source files will automatically be added to
the project for building these lex files.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 37
\target LIBS
\section1 LIBS
Specifies a list of libraries to be linked into the project.
If you use the Unix \c -l (library) and -L (library path) flags, qmake
handles the libraries correctly on Windows (that is, passes the full path of
the library to the linker). The library must exist for
qmake to find the directory where a \c -l lib is located.
1261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 38
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
\snippet doc/src/snippets/qmake/spaces.pro quoting library paths with spaces
By default, the list of libraries stored in \c LIBS is reduced to a list of
unique names before it is used. To change this behavior, add the
\c no_lflags_merge option to the \l{CONFIG} variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 39
\target LITERAL_HASH
\section1 LITERAL_HASH
This variable is used whenever a literal hash character (\c{#}) is needed in
a variable declaration, perhaps as part of a file name or in a string passed
to some external application.
For example:
\snippet doc/src/snippets/qmake/comments.pro 1
By using \c LITERAL_HASH in this way, the \c # character can be used
to construct a URL for the \c message() function to print to the console.
\target MAKEFILE
\section1 MAKEFILE
Specifies the name of the generated Makefile. The value of this variable is
typically handled by qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to
be modified.
\target MAKEFILE_GENERATOR
\section1 MAKEFILE_GENERATOR
Specifies the name of the Makefile generator to use
when generating a Makefile. The value of this variable is typically
handled internally by qmake and rarely needs to
be modified.
\target MOC_DIR
\section1 MOC_DIR
Specifies the directory where all intermediate moc
files should be placed.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 40
\target OBJECTS
\section1 OBJECTS
This variable is automatically populated from the \l{SOURCES} variable.
The extension of each source file is replaced by .o (Unix) or .obj (Win32).
You can add objects to the list.
\target OBJECTS_DIR
\section1 OBJECTS_DIR
Specifies the directory where all intermediate
objects should be placed.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 41
1331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400
\target POST_TARGETDEPS
\section1 POST_TARGETDEPS
Lists the libraries that the \l{#TARGET}{target} depends on. Some backends,
such as the generators for Visual Studio and Xcode project files, do not
support this variable. Generally, this variable is supported internally by
these build tools, and it is useful for explicitly listing dependent static
libraries.
This list is placed after all builtin (and \link #PRE_TARGETDEPS
$$PRE_TARGETDEPS \endlink) dependencies.
\target PRE_TARGETDEPS
\section1 PRE_TARGETDEPS
Lists libraries that the \l{#TARGET}{target} depends on. Some backends,
such as the generators for Visual Studio and Xcode project files, do not
support this variable. Generally, this variable is supported internally by
these build tools, and it is useful for explicitly listing dependent static
libraries.
This list is placed before all builtin dependencies.
\target PRECOMPILED_HEADER
\section1 PRECOMPILED_HEADER
Indicates the header file for creating a precompiled
header file, to increase the compilation speed of a project.
Precompiled headers are currently only supported on some platforms
(Windows - all MSVC project types, Mac OS X - Xcode, Makefile,
Unix - gcc 3.3 and up).
\target PWD
\section1 PWD
Specifies the full path leading to the directory
containing the current file being parsed. This can be useful
to refer to files within the source tree when writing project files to
support shadow builds.
See also \l{#_PRO_FILE_PWD_}{_PRO_FILE_PWD_}.
\note Do not attempt to overwrite the value of this variable.
\target OUT_PWD
\section1 OUT_PWD
Specifies the full path leading to the directory where qmake places the
generated Makefile.
\note Do not attempt to overwrite the value of this variable.
\target QMAKE_systemvariable
\section1 QMAKE
Specifies the name of the qmake program itself and is placed in generated
Makefiles. The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKESPEC_systemvariable
\section1 QMAKESPEC
A system variable that contains the full path of the qmake configuration that is used
when generating Makefiles. The value of this variable is automatically computed.
\note Do not attempt to overwrite the value of this variable.
\target QMAKE_AR_CMD
\section1 QMAKE_AR_CMD
1401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470
\note This variable is used on Unix platforms only.
Specifies the command to execute when creating a shared library. The value of this variable
is typically handled by qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_BUNDLE_DATA
\section1 QMAKE_BUNDLE_DATA
\note This variable is used on Mac OS X only.
Specifies the data that will be installed with a library
bundle, and is often used to specify a collection of header files.
For example, the following lines add \c path/to/header_one.h
and \c path/to/header_two.h to a group containing information about the
headers supplied with the framework:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 43
The last line adds the information about the headers to the collection of
resources that will be installed with the library bundle.
Library bundles are created when the \c lib_bundle option is added to the
\l{#CONFIG}{CONFIG} variable.
See \l{Platform Notes#Creating Frameworks}{Platform Notes} for
more information about creating library bundles.
\section1 QMAKE_BUNDLE_EXTENSION
\note This variable is used on Mac OS X only.
Specifies the extension to be used for library bundles.
This allows frameworks to be created with custom extensions instead of the
standard \c{.framework} directory name extension.
For example, the following definition will result in a framework with the
\c{.myframework} extension:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 44
\section1 QMAKE_CC
Specifies the C compiler that will be used when building
projects containing C source code. Only the file name of the compiler
executable needs to be specified as long as it is on a path contained
in the \c PATH variable when the Makefile is processed.
\target QMAKE_CFLAGS_DEBUG
\section1 QMAKE_CFLAGS_DEBUG
Specifies the C compiler flags for debug builds.
The value of this variable is typically handled by qmake or \l{#QMAKESPEC}{qmake.conf} and
rarely needs to be modified.
\target QMAKE_CFLAGS_RELEASE
\section1 QMAKE_CFLAGS_RELEASE
Specifies the C compiler flags for release builds.
The value of this variable is typically handled by qmake or \l{#QMAKESPEC}{qmake.conf}
and rarely needs to be modified.
\target QMAKE_CFLAGS_SHLIB
\section1 QMAKE_CFLAGS_SHLIB
\note This variable is used on Unix platforms only.
Specifies the compiler flags for creating a shared
library. The value of this variable is typically handled by
1471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_CFLAGS_THREAD
\section1 QMAKE_CFLAGS_THREAD
Specifies the compiler flags for creating a multi-threaded
application. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_CFLAGS_WARN_OFF
\section1 QMAKE_CFLAGS_WARN_OFF
This variable is used only when the \c {warn_off} \l{#CONFIG}{CONFIG} option
is set. The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_CFLAGS_WARN_ON
\section1 QMAKE_CFLAGS_WARN_ON
This variable is used only when the \c {warn_on} \l{#CONFIG}{CONFIG} option
is set. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_CLEAN
\section1 QMAKE_CLEAN
Specifies a list of generated files (by \l{moc} and \l{uic}, for example) and
object files to be removed by \c {make clean}.
\section1 QMAKE_CXX
Specifies the C++ compiler that will be used when building
projects containing C++ source code. Only the file name of the compiler
executable needs to be specified as long as it is on a path contained
in the \c PATH variable when the Makefile is processed.
\section1 QMAKE_CXXFLAGS
Specifies the C++ compiler flags for building
a project. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified. The flags specific to debug and release modes can be
adjusted by modifying the \c QMAKE_CXXFLAGS_DEBUG and
\c QMAKE_CXXFLAGS_RELEASE variables, respectively.
\target QMAKE_CXXFLAGS_DEBUG
\section1 QMAKE_CXXFLAGS_DEBUG
Specifies the C++ compiler flags for debug builds.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_CXXFLAGS_RELEASE
\section1 QMAKE_CXXFLAGS_RELEASE
Specifies the C++ compiler flags for release builds.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_CXXFLAGS_SHLIB
\section1 QMAKE_CXXFLAGS_SHLIB
Specifies the C++ compiler flags for creating a shared library.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_CXXFLAGS_THREAD
1541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610
\section1 QMAKE_CXXFLAGS_THREAD
Specifies the C++ compiler flags for creating a multi-threaded application.
The value of this variable is typically handled by qmake or \l{#QMAKESPEC}
{qmake.conf} and rarely needs to be modified.
\target QMAKE_CXXFLAGS_WARN_OFF
\section1 QMAKE_CXXFLAGS_WARN_OFF
Specifies the C++ compiler flags for suppressing compiler
warnings. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_CXXFLAGS_WARN_ON
\section1 QMAKE_CXXFLAGS_WARN_ON
Specifies C++ compiler flags for generating compiler warnings.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_DISTCLEAN
\section1 QMAKE_DISTCLEAN
Specifies a list of files to be removed by \c{make distclean}.
\target QMAKE_EXTENSION_SHLIB
\section1 QMAKE_EXTENSION_SHLIB
Contains the extension for shared libraries. The value of
this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\note Platform-specific variables that change the extension override
the contents of this variable.
\section1 QMAKE_EXT_MOC
Contains the extension used on included moc files.
See also \l{Configuring qmake#Extensions}{File Extensions}.
\section1 QMAKE_EXT_UI
Contains the extension used on \QD UI files.
See also \l{Configuring qmake#Extensions}{File Extensions}.
\section1 QMAKE_EXT_PRL
Contains the extension used on created PRL files.
See also \l{Configuring qmake#Extensions}{File Extensions},
\l{LibDepend}{Library Dependencies}.
\section1 QMAKE_EXT_LEX
Contains the extension used on files given to Lex.
See also \l{Configuring qmake#Extensions}{File Extensions},
\l{#LEXSOURCES}{LEXSOURCES}.
\section1 QMAKE_EXT_YACC
Contains the extension used on files given to Yacc.
See also \l{Configuring qmake#Extensions}{File Extensions},
\l{#YACCSOURCES}{YACCSOURCES}.
\section1 QMAKE_EXT_OBJ
1611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680
Contains the extension used on generated object files.
See also \l{Configuring qmake#Extensions}{File Extensions}.
\section1 QMAKE_EXT_CPP
Contains suffixes for files that should be interpreted as C++ source code.
See also \l{Configuring qmake#Extensions}{File Extensions}.
\section1 QMAKE_EXT_H
Contains suffixes for files which should be interpreted as C header files.
See also \l{Configuring qmake#Extensions}{File Extensions}.
\section1 QMAKE_EXTRA_COMPILERS
Specifies a list of additional compilers or preprocessors.
See also \l{Adding Compilers}.
\section1 QMAKE_EXTRA_TARGETS
Specifies a list of additional qmake targets.
See also \l{Adding Custom Targets}.
\target QMAKE_FAILED_REQUIREMENTS
\section1 QMAKE_FAILED_REQUIREMENTS
Contains the list of failed requirements.
The value of this variable is set by qmake and cannot be modified.
See also \l{requires(condition)}{requires()} and \l{REQUIRES}.
\section1 QMAKE_FRAMEWORK_BUNDLE_NAME
\note This variable is used on Mac OS X only.
In a framework project, this variable contains the name to be used for the
framework that is built.
By default, this variable contains the same value as the \l{#TARGET}{TARGET}
variable.
See \l{Creating Frameworks} for
more information about creating frameworks and library bundles.
\target QMAKE_FRAMEWORK_VERSION
\section1 QMAKE_FRAMEWORK_VERSION
\note This variable is used on Mac OS X only.
For projects where the build target is a Mac OS X framework, this variable
is used to specify the version number that will be applied to the framework
that is built.
By default, this variable contains the same value as the \l{#VERSION}{VERSION}
variable.
See \l{Creating Frameworks} for more information about creating frameworks.
\target QMAKE_INCDIR
\section1 QMAKE_INCDIR
Specifies the list of system header paths that are appended to \l{INCLUDEPATH}.
The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
1681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750
\target QMAKE_INCDIR_EGL
\section1 QMAKE_INCDIR_EGL
Specifies the location of EGL header files to be added to
\l{INCLUDEPATH} when building a target with OpenGL/ES or OpenVG support.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target QMAKE_INCDIR_OPENGL
\section1 QMAKE_INCDIR_OPENGL
Specifies the location of OpenGL header files to be added
to \l{INCLUDEPATH} when building a target with OpenGL support. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenGL implementation uses EGL (most OpenGL/ES systems),
then QMAKE_INCDIR_EGL may also need to be set.
\section1 QMAKE_INCDIR_OPENGL_ES1, QMAKE_INCDIR_OPENGL_ES2
These variables specify the location of OpenGL headers files to be added
to \l{INCLUDEPATH} when building a target with OpenGL ES 1
or OpenGL ES 2 support respectively.
The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenGL implementation uses EGL (most OpenGL/ES systems),
then QMAKE_INCDIR_EGL may also need to be set.
\target QMAKE_INCDIR_OPENVG
\section1 QMAKE_INCDIR_OPENVG
Specifies the location of OpenVG header files to be added
to \l{INCLUDEPATH} when building a target with OpenVG support. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenVG implementation uses EGL then QMAKE_INCDIR_EGL may also
need to be set.
\target QMAKE_INCDIR_X11
\section1 QMAKE_INCDIR_X11
\note This variable is used on Unix platforms only.
Specifies the location of X11 header file paths to be added
to \l{INCLUDEPATH} when building a X11 target. The value of this variable
is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\target QMAKE_INFO_PLIST
\section1 QMAKE_INFO_PLIST
\note This variable is used on Mac OS X platforms only.
Specifies the name of the property list file, \c{.plist}, you
would like to include in your Mac OS X application bundle.
In the \c{.plist} file, you can define some variables, e.g., @EXECUTABLE@,
which qmake will replace with the actual executable name. Other variables
include @ICON@, @TYPEINFO@, @LIBRARY@, and @SHORT_VERSION@.
\note Most of the time, the default \c{Info.plist} is good enough.
1751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820
\section1 QMAKE_LFLAGS
Specifies a general set of flags that are passed to
the linker. If you need to change the flags used for a particular
platform or type of project, use one of the specialized variables
for that purpose instead of this variable.
\target QMAKE_LFLAGS_CONSOLE
\section1 QMAKE_LFLAGS_CONSOLE
\note This variable is used on Windows only.
Specifies the linker flags for building console programs. The value
of this variable is typically handled by qmake
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_DEBUG
Specifies the linker flags for debug builds.
The value of this variable is typically handled by qmake or \l{#QMAKESPEC}{qmake.conf}
and rarely needs to be modified.
\section1 QMAKE_LFLAGS_PLUGIN
Specifies the linker flags for building plugins. The value of this
variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_RPATH
\note This variable is used on Unix platforms only.
Specifies the linker flags needed to use the values from \l{QMAKE_RPATHDIR}.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_RPATHLINK
Specifies the linker flags needed to use the values from
\l{QMAKE_RPATHLINKDIR}.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_RELEASE
Specifies the linker flags for release builds.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_APP
Specifies the linker flags for building applications.
The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LFLAGS_SHLIB
Specifies the linker flags used for building shared libraries.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_LFLAGS_SONAME
Specifies the linker flags for setting the name of shared objects,
such as .so or .dll. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
1821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890
needs to be modified.
\section1 QMAKE_LFLAGS_THREAD
Specifies the linker flags for building multi-threaded projects.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_LFLAGS_WINDOWS
\note This variable is used on Windows only.
Specifies the linker flags for building Windows GUI projects (that is,
non-console applications). The value of this variable is typically handled
by qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_LIBDIR
Specifies a list of system library paths.
The value of this variable is typically handled by qmake
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LIBDIR_FLAGS
\note This variable is used on Unix platforms only.
Specifies the location of all library directories with -L
prefixed. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_LIBDIR_EGL
Specifies the location of the EGL library directory, when EGL
is used with OpenGL/ES or OpenVG. The value of this variable is typically
handled by qmake or \l{#QMAKESPEC}{qmake.conf}
and rarely needs to be modified.
\section1 QMAKE_LIBDIR_OPENGL
Specifies the location of the OpenGL library directory. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenGL implementation uses EGL (most OpenGL/ES systems),
then QMAKE_LIBDIR_EGL may also need to be set.
\section1 QMAKE_LIBDIR_OPENVG
Specifies the location of the OpenVG library directory. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenVG implementation uses EGL, then QMAKE_LIBDIR_EGL
may also need to be set.
\section1 QMAKE_LIBDIR_X11
\note This variable is used on Unix platforms only.
Specifies the location of the X11 library directory. The value
of this variable is typically handled by qmake
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LIBS
1891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960
Specifies all project libraries. The value of this variable
is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LIBS_EGL
Specifies all EGL libraries when building Qt with OpenGL/ES
or OpenVG. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified. The usual value is \c{-lEGL}.
\section1 QMAKE_LIBS_OPENGL
Specifies all OpenGL libraries. The value of this variable
is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
If the OpenGL implementation uses EGL (most OpenGL/ES systems),
then QMAKE_LIBS_EGL may also need to be set.
\section1 QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES2
These variables specify all the OpenGL libraries for OpenGL ES 1
and OpenGL ES 2.
The value of these variables is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
If the OpenGL implementation uses EGL (most OpenGL/ES systems),
then QMAKE_LIBS_EGL may also need to be set.
\section1 QMAKE_LIBS_OPENVG
Specifies all OpenVG libraries. The value of this variable
is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified. The usual
value is \c{-lOpenVG}.
Some OpenVG engines are implemented on top of OpenGL. This will
be detected at configure time and QMAKE_LIBS_OPENGL will be implicitly
added to QMAKE_LIBS_OPENVG wherever the OpenVG libraries are linked.
If the OpenVG implementation uses EGL, then QMAKE_LIBS_EGL may also
need to be set.
\section1 QMAKE_LIBS_THREAD
\note This variable is used on Unix platforms only.
Specifies all libraries that need to be linked against when
building a multi-threaded target. The value of this variable is
typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LIBS_X11
\note This variable is used on Unix platforms only.
Specifies all X11 libraries. The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LIB_FLAG
This variable is not empty if the \c lib template is specified. The value
of this variable is typically handled by qmake
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_LINK_SHLIB_CMD
1961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030
Specifies the command to execute when creating a shared
library. The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_LN_SHLIB
Specifies the command to execute when creating a link to a shared library. The
value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_POST_LINK
Specifies the command to execute after linking the \l{TARGET}
together. This variable is normally empty and therefore nothing is
executed.
\note This variable takes no effect on Xcode projects.
\section1 QMAKE_PRE_LINK
Specifies the command to execute before linking the \l{TARGET}
together. This variable is normally empty and therefore nothing is
executed.
\note This variable takes no effect on Xcode projects.
\section1 QMAKE_PROJECT_NAME
\note This variable is used for Visual Studio project files only.
Determines the name of the project when generating project
files for IDEs. The default value is the target name. The value of this
variable is typically handled by qmake and rarely needs to be modified.
\section1 QMAKE_MAC_SDK
This variable is used on Mac OS X when building universal binaries.
\section1 QMAKE_MACOSX_DEPLOYMENT_TARGET
This variable only takes effect when building on Mac OS X. On that
platform, the variable will be forwarded to the MACOSX_DEPLOYMENT_TARGET
environment variable, which is interpreted by the compiler or linker.
For more information, see the
\l{Deploying an Application on Mac OS X#Mac OS X Version Dependencies}{Deploying
an Application on Mac OS X} document.
\section1 QMAKE_MAKEFILE
Specifies the name of the Makefile to create. The value of
this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QMAKE_QMAKE
Contains the abosolute path of the qmake executable.
\note Do not attempt to overwrite the value of this variable.
\section1 QMAKE_RESOURCE_FLAGS
This variable is used to customize the list of options passed to the
\l{rcc}{Resource Compiler} in each of the build rules where it is used.
For example, the following line ensures that the \c{-threshold} and
\c{-compress} options are used with particular values each time that
\c rcc is invoked:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 45
2031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100
\section1 QMAKE_RPATHDIR
\note This variable is used on Unix platforms only.
Specifies a list of library paths that are added to the
executable at link time so that the paths will be preferentially
searched at runtime.
\section1 QMAKE_RPATHLINKDIR
Specifies a list of library paths for the static linker to search for implicit
dependencies of shared libraries. For more information, see the manual page
for \c ld(1).
\section1 QMAKE_RUN_CC
Specifies the individual rule needed to build an object. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_RUN_CC_IMP
Specifies the individual rule needed to build an object. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_RUN_CXX
Specifies the individual rule needed to build an object. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_RUN_CXX_IMP
Specifies the individual rule needed to build an object. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 QMAKE_TARGET
Specifies the name of the project target. The value of this
variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 QT
Specifies the Qt modules that are used by your project.
The table below shows the options that can be used with the \c QT variable
and the Qt modules that are associated with each of them:
\table
\header \li Option \li Module Enabled
\row \li axcontainer \li \l{Using ActiveX controls and COM in Qt}
{QAxContainer}, which is
part of the \l{Active Qt} framework
\row \li axserver \li \l{Building ActiveX servers in Qt}
{QAxServer}, which is
part of the \l{Active Qt} framework
\row \li concurrent \li \l{Qt Concurrent}
\row \li core (included by default) \li \l{Qt Core}
\row \li dbus \li \l{Qt D-Bus}
\row \li declarative \li \l{Qt Quick 1} (deprecated)
\row \li designer \li \l{Qt Designer}
\row \li designercomponents \li \l{Qt Designer Components}
\row \li gui (included by default) \li \l{Qt GUI}
2101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170
\row \li help \li \l{Qt Help}
\row \li multimedia \li \l{Qt Multimedia}
\row \li multimediawidgets \li \l{Qt Multimedia Widgets}
\row \li network \li \l{Qt Network}
\row \li opengl \li \l{Qt OpenGL} (deprecated)
\row \li printsupport \li \l{Qt Print Support}
\row \li qml \li \l{Qt QML}
\row \li qmltest \li \l{Qt QML Test}
\row \li x11extras \li \l{Qt X11 Extras}
\row \li quick \li \l{Qt Quick}
\row \li script \li \l{Qt Script} (deprecated)
\row \li scripttools \li \l{Qt Script Tools} (deprecated)
\row \li sensors \li \l{Qt Sensors}
\row \li serialport \li \l{Qt Serial Port}
\row \li sql \li \l{Qt SQL}
\row \li svg \li \l{Qt SVG}
\row \li testlib \li \l{Qt Test}
\row \li uitools \li \l{Qt UI Tools}
\row \li webkit \li \l{Qt WebKit}
\row \li webkitwidgets \li \l{Qt WebKit Widgets}
\row \li widgets \li \l{Qt Widgets}
\row \li xml \li \l{Qt XML} (deprecated)
\row \li xmlpatterns \li \l{Qt XML Patterns}
\endtable
By default, \c QT contains both \c core and \c gui, ensuring that standard
GUI applications can be built without further configuration.
If you want to build a project \e without the \l{Qt GUI} module, you need to
exclude the \c gui value with the "-=" operator. The following line will
result in a minimal Qt project being built:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 47
\section1 QTPLUGIN
Specifies a list of names of static Qt plugins that are to be
linked with an application so that they are available as built-in
resources.
\target QT_VERSION_variable
\section1 QT_VERSION
Contains the current version of Qt.
\target QT_MAJOR_VERSION
\section1 QT_MAJOR_VERSION
Contains the current major version of Qt.
\target QT_MINOR_VERSION
\section1 QT_MINOR_VERSION
Contains the current minor version of Qt.
\target QT_PATCH_VERSION
\section1 QT_PATCH_VERSION
Contains the current patch version of Qt.
\section1 RC_FILE
Specifies the name of the resource file for the application.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 RC_INCLUDEPATH
Specifies include paths that are passed to the Windows Resource Compiler.
2171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240
\target RCC_DIR
\section1 RCC_DIR
Specifies the directory for Qt Resource Compiler output files.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 48
\target REQUIRES
\section1 REQUIRES
Specifies a list of values that are evaluated as conditions. If any of the conditions is false,
qmake skips this project (and its \l{SUBDIRS}) when building.
\note We recommend using the \l{requires(condition)}{requires()} function
instead if you want to skip projects or subprojects when building.
\target RESOURCES
\section1 RESOURCES
Specifies the name of the resource collection files (qrc)
for the target. For more information about the resource collection
file, see \l{The Qt Resource System}.
\section1 RES_FILE
Specifies the name of the compiled Windows resource file for the target.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target SIGNATURE_FILE
\section1 SIGNATURE_FILE
\note This variable is only used on Windows CE.
Specifies which signature file should be used to sign the project target.
\note This variable will overwrite the setting you have specified in configure,
with the \c -signature option.
\target SOURCES
\section1 SOURCES
Specifies the names of all source files in the project.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 49
See also \l{#HEADERS}{HEADERS}.
\target SUBDIRS
\section1 SUBDIRS
This variable, when used with the \l{#TEMPLATE}{\c subdirs template}
Specifies the names of all subdirectories or project files that contain
parts of the project that need be built. Each subdirectory specified
using this variable must contain its own project file.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 50
It is essential that the project file in each subdirectory has the same
name as the subdirectory itself, so that qmake
can find it. For example, if the subdirectory is called \c myapp then the
project file in that directory should be called \c myapp.pro.
2241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310
If you need to ensure that the subdirectories are built in the order in
which they are specified, update the \l{#CONFIG}{CONFIG} variable to
include the \c ordered option:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 51
It is possible to modify this default behavior of \c SUBDIRS by giving
additional modifiers to \c SUBDIRS elements. Supported modifiers are:
\table
\header \li Modifier \li Effect
\row \li .subdir \li Use the specified subdirectory instead of \c SUBDIRS value.
\row \li .file \li Specify the subproject \c pro file explicitly. Cannot be
used in conjunction with \c .subdir modifier.
\row \li .depends \li This subproject depends on specified subproject.
Available only on platforms that use makefiles.
\row \li .makefile \li The makefile of subproject.
Available only on platforms that use makefiles.
\row \li .target \li Base string used for makefile targets related to this
subproject.
Available only on platforms that use makefiles.
\endtable
For example, define two subdirectories, both of which reside in a different directory
than the \c SUBDIRS value, and one of the subdirectories must be built before the other:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 149
\target TARGET
\section1 TARGET
Specifies the name of the target file. Contains the base name of the project
file by default.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 52
The project file above would produce an executable named \c myapp on
unix and \c{myapp.exe} on Windows.
\section1 TARGET_EXT
Specifies the extension of \c TARGET. The value of this variable
is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\section1 TARGET_x
Specifies the extension of \c TARGET with a major version number.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\section1 TARGET_x.y.z
Specifies the extension of \c TARGET with version number. The
value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target TEMPLATE
\section1 TEMPLATE
Specifies the name of the template to use when generating the project. The
allowed values are:
\table
\header \li Option \li Description
2311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380
\row \li app \li Creates a Makefile for building applications
(the default). See \l{Building an Application} for more information.
\row \li lib \li Creates a Makefile for building libraries. See
\l{Building a Library} for more information.
\row \li subdirs \li Creates a Makefile for building targets in subdirectories.
The subdirectories are specified using the \l{#SUBDIRS}{SUBDIRS}
variable.
\row \li vcapp \li Windows only. Creates an application project for
Visual Studio. See \l{Creating Visual Studio Project Files} for more
information.
\row \li vclib \li Windows only. Creates a library project for Visual Studio.
\endtable
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 53
The template can be overridden by specifying a new template type with the
\c -t command line option. This overrides the template type \e after the .pro
file has been processed. With .pro files that use the template type to
determine how the project is built, it is necessary to declare TEMPLATE on
the command line rather than use the \c -t option.
\section1 TRANSLATIONS
Specifies a list of translation (.ts) files that contain
translations of the user interface text into non-native languages.
See the \l{Qt Linguist Manual} for more information about
internationalization (i18n) and localization (l10n) with Qt.
\target UI_DIR
\section1 UI_DIR
Specifies the directory where all intermediate files from uic
should be placed.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 54
\target VERSION
\section1 VERSION
Specifies the version number of the application if the \c app \l{#TEMPLATE}{template} is
specified or the version number of the library if the \c lib template is specified.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 57
\section1 VER_MAJ
Specifies the major version number of the library if the
\c lib \l{#TEMPLATE}{template} is specified.
\section1 VER_MIN
Specifies the minor version number of the library if the
\c lib \l{#TEMPLATE}{template} is specified.
\section1 VER_PAT
Specifies the patch version number of the library if the
\c lib \l{#TEMPLATE}{template} is specified.
\section1 VPATH
Tells qmake where to search for files it cannot open. For example, if qmake
looks for \c SOURCES and finds an entry that it cannot open, it looks
2381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450
through the entire VPATH list to see if it can find the file on its own.
See also \l{#DEPENDPATH}{DEPENDPATH}.
\target YACCSOURCES
\section1 YACCSOURCES
Specifies a list of Yacc source files to be included
in the project. All dependencies, headers and source files will
automatically be included in the project.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 58
\section1 _PRO_FILE_
Contains the path to the project file in use.
For example, the following line causes the location of the project
file to be written to the console:
\snippet doc/src/snippets/qmake/project_location.pro project file
\note Do not attempt to overwrite the value of this variable.
\section1 _PRO_FILE_PWD_
Contains the path to the directory containing the project file in use.
For example, the following line causes the location of the directory
containing the project file to be written to the console:
\snippet doc/src/snippets/qmake/project_location.pro project file directory
\note Do not attempt to overwrite the value of this variable.
*/
/*!
\page qmake-function-reference.html
\title Replace Functions
\contentspage {qmake Manual}{Contents}
\previouspage Variables
\nextpage Test Functions
qmake provides functions for processing the contents of variables
during the configuration process. These functions are called
\e {replace functions}. Typically, they return values that you can
assign to other variables. You can obtain these values by prefixing a
function with the \c $$ operator. Replace functions can be divided into
built-in functions and function libraries.
See also \l{Test Functions}.
\section1 Built-in Replace Functions
Basic replace functions are implemented as built-in functions.
\section2 absolute_path(path[, base])
Returns the absolute path of \c path.
If \c base is not specified, uses the current directory as the base
directory.
For example, the following call returns the string
\c {"/home/johndoe/myproject/readme.txt"}:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 159
2451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520
See also \l{clean_path(path)}{clean_path()},
\l{relative_path(filePath[, base])}{relative_path()}.
\section2 basename(variablename)
Returns the basename of the file specified in \c variablename.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 59
\section2 cat(filename[, mode])
Returns the contents of \c filename. You can specify the following options
for \c mode:
\list
\li \c blob returns the entire contents of the file as one value
\li \c lines returns each line as a separate value (without line
endings)
\li \c true (default value) and \c false return file contents as
separate values, split according to qmake value list splitting rules
(as in variable assignments). If \c mode is \c false, values that
contain only a newline character are inserted into the list to
indicate where line breaks were in the file.
\endlist
\section2 clean_path(path)
Returns \c path with directory separators normalized (converted to "/") and
redundant ones removed, and "."s and ".."s resolved (as far as possible).
This function is a wrapper around QDir::cleanPath.
See also \l{absolute_path(path[, base])}{absolute_path()},
\l{relative_path(filePath[, base])}{relative_path()},
\l{shell_path(path)}{shell_path()}, \l{system_path(path)}{system_path()}.
\section2 dirname(file)
Returns the directory name part of the specified file. For example:
\snippet doc/src/snippets/qmake/dirname.pro 0
\section2 enumerate_vars
Returns a list of all defined variable names.
\section2 escape_expand(arg1 [, arg2 ..., argn])
Accepts an arbitrary number of arguments. It expands the
escape sequences \c {\n}, \c {\r}, \c {\t} for each argument and returns
the arguments as a list.
\note If you specify the string to expand literally, you need to escape the
backslashes, as illustrated by the following code snippet:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 173
\target findfunction
\section2 find(variablename, substr)
Returns all the values in \c variablename that match the regular expression
\c substr.
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 64
MY_VAR2 will contain '-Lone -Ltwo -Lthree -Lfour -Lfive', and MY_VAR3 will
contain 'three two three'.
\section2 first(variablename)
2521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590
Returns the first value of \c variablename.
For example, the following call returns \c firstname:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 161
See also \l{last(variablename)}{last()}.
\section2 format_number(number[, options...])
Returns \c number in the format specified by \c options. You can specify the
following options:
\list
\li \c ibase=n sets the base of the input to \c n
\li \c obase=n sets the base of the output to \c n
\li \c width=n sets the minimum width of the output to \c n. If the
output is shorter than \c width, it is padded with spaces
\li \c zeropad pads the output with zeroes instead of spaces
\li \c padsign prepends a space to positive values in the output
\li \c alwayssign prepends a plus sign to positive values in the output
\li \c leftalign places the padding to the right of the value in the
output
\endlist
Floating-point numbers are currently not supported.
For example, the following call converts the hexadecimal number \c BAD to
\c 002989:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 163
\section2 fromfile(filename, variablename)
Evaluates \c filename as a qmake project file and returns the value assigned
to \c variablename.
See also \l{infile(filename, var, val)}{infile()}.
\section2 join(variablename, glue, before, after)
Joins the value of \c variablename with \c glue. If this value is
not empty, this function prefixes the value with \c before and suffixes it
with \c after. \c variablename is the only required field, the others default
to empty strings. If you need to encode spaces in \c glue, \c before, or \c
after, you must quote them.
\section2 last(variablename)
Returns the last value of \c variablename.
For example, the following call returns \c phone:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 162
See also \l{first(variablename)}{first()}.
\section2 list(arg1 [, arg2 ..., argn])
Takes an arbitrary number of arguments. It creates a uniquely
named variable that contains a list of the arguments, and returns the name
of that variable. You can use the variable to write a loop as illustrated by
the following code snippet
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 170
instead of:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 171
2591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660
\section2 lower(arg1 [, arg2 ..., argn])
Takes an arbitrary number of arguments and converts them to lower case.
See also \l{upper(arg1 [, arg2 ..., argn])}{upper()}.
\section2 member(variablename, position)
Returns the value at the given \c position in the list of items in
\c variablename.
If an item cannot be found at the position specified, an empty string is
returned. \c variablename is the only required field. If not specified,
\c position defaults to 0, causing the first value in the list to be
returned.
\section2 prompt(question)
Displays the specified \c question, and returns a value read from stdin.
\section2 quote(string)
Converts a whole \c string into a single entity and returns the result.
This is just a fancy way of enclosing the string into double quotes.
\section2 re_escape(string)
Returns the \c string with every special regular expression character
escaped with a backslash. This function is a wrapper around QRegExp::escape.
\section2 relative_path(filePath[, base])
Returns the path to \c filePath relative to \c base. If \c base is not
specified, it is the current project directory. This function is a wrapper
around QDir::relativeFilePath.
See also \l{absolute_path(path[, base])}{absolute_path()},
\l{clean_path(path)}{clean_path()}.
\section2 replace(string, old_string, new_string)
Replaces each instance of \c old_string with \c new_string in the
contents of the variable supplied as \c string. For example, the
code
\snippet doc/src/snippets/qmake/replace.pro 0
prints the message:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 70
\section2 sprintf(string, arguments...)
Replaces %1-%9 with the arguments passed in the comma-separated list
of function \c arguments and returns the processed string.
\section2 resolve_depends(variablename, prefix)
This is an internal function that you will typically not need.
\section2 reverse(variablename)
Returns the values of \c variablename in reverse order.
\section2 section(variablename, separator, begin, end)
Returns a section of the value of \c variablename. This function is a
wrapper around QString::section.
For example, the following call outputs \c surname:
2661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 167
\section2 shadowed(path)
Maps the path from the project source directory to the build directory.
This function returns \c path for in-source builds. It returns an empty
string if \c path points outside of the source tree.
\section2 shell_path(path)
Converts all directory separators within \c path to separators that are
compatible with the shell that is used while building the project (that is,
the shell that is invoked by the make tool). For example, slashes are
converted to backslashes when the Windows shell is used.
See also \l{system_path(path)}{system_path()}.
\section2 shell_quote(arg)
Quotes \c arg for the shell that is used while building the project.
See also \l{system_quote(arg)}{system_quote()}.
\section2 size(variablename)
Returns the number of values of \c variablename.
\section2 sort_depends(variablename, prefix)
This is an internal function that you will typically not need.
\section2 split(variablename, separator)
Splits the value of \c variablename into separate values, and returns them
as a list. This function is a wrapper around QString::split.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 168
\section2 system(command[, mode])
You can use this variant of the \c system function to obtain stdout from the
command and assign it to a variable.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 72
See also the test variant of \l{system(command)}{system()}.
\section2 system_path(path)
Converts all directory separators within \c path to separators that are
compatible with the shell that is used by the \c{system()} functions to
invoke commands. For example, slashes are converted to backslashes for the
Windows shell.
See also \l{shell_path(path)}{shell_path()}.
\section2 system_quote(arg)
Quotes \c arg for the for the shell that is used by the \c{system()}
functions.
See also \l{shell_quote(arg)}{shell_quote()}.
\target unique
\section2 unique(variablename)
2731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800
Returns the list of values in \c variablename with duplicate entries removed.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 73
\section2 upper(arg1 [, arg2 ..., argn])
Takes an arbitrary number of arguments and converts them to upper case.
See also \l{lower(arg1 [, arg2 ..., argn])}{lower()}.
\section2 val_escape(variablename)
Escapes the values of \c variablename in a way that enables parsing them as
qmake code.
*/
/*!
\page qmake-test-function-reference.html
\title Test Functions
\contentspage {qmake Manual}{Contents}
\previouspage Replace Functions
Test functions return a boolean value that you can test for in the
conditional parts of scopes. Test functions can be divided into
built-in functions and function libraries.
See also \l{Replace Functions}.
\section1 Built-in Test Functions
Basic test functions are implemented as built-in functions.
\section2 cache(variablename, [set|add|sub] [transient] [super], [source variablename])
This is an internal function that you will typically not need.
\section2 CONFIG(config)
This function can be used to test for variables placed into the
\l{CONFIG} variable. This is the same as scopes,
but has the added advantage that a second parameter can be passed to test for
the active config. As the order of values is important in \c CONFIG
variables (that is, the last one set will be considered the active config for
mutually exclusive values) a second parameter can be used to specify a set
of values to consider. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 60
Because release is considered the active setting (for feature parsing)
it will be the CONFIG used to generate the build file. In the common
case a second parameter is not needed, but for specific mutual
exclusive tests it is invaluable.
\section2 contains(variablename, value)
Succeeds if the variable \c variablename contains the value \c value;
otherwise fails. You can check the return value of this function using
a scope.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 61
The contents of the scope are only processed if the \c drivers
variable contains the value \c network. If this is the case, the
appropriate files are added to the \l{SOURCES} and \l{HEADERS}
variables.
2801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870
\target countfunction
\section2 count(variablename, number)
Succeeds if the variable \c variablename contains a list with the
specified \c number of values; otherwise fails.
This function is used to ensure that declarations inside a scope are
only processed if the variable contains the correct number of values.
For example:
\snippet doc/src/snippets/qmake/functions.pro 2
\section2 debug(level, message)
Checks whether qmake runs at the specified debug level. If yes, it returns
true and prints a debug message.
\section2 defined(name[, type])
Tests whether the function or variable \c name is defined. If \c type is
omitted, checks all functions. To check only variables or particular type of
functions, specify \c type. It can have the following values:
\list
\li \c test only checks test functions
\li \c replace only checks replace functions
\li \c var only checks variables
\endlist
\section2 equals(variablename, value)
Tests whether \c variablename equals the string \c value.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 160
\section2 error(string)
This function never returns a value. qmake displays \c string as an error
message to the user and exits. This function should only be used for
unrecoverable errors.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 62
\section2 eval(string)
Evaluates the contents of the string using
qmake syntax rules and returns true.
Definitions and assignments can be used in the string to modify the
values of existing variables or create new definitions.
For example:
\snippet doc/src/snippets/qmake/functions.pro 4
\note Quotation marks can be used to delimit the string, and
the return value can be discarded if it is not needed.
\section2 exists(filename)
Tests whether a file with the given \c filename exists.
If the file exists, the function succeeds; otherwise it fails.
If a regular expression is specified for the filename, this function
succeeds if any file matches the regular expression specified.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 63
2871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940
\note "/" should be used as a directory separator, regardless of the
platform in use.
\section2 export(variablename)
Exports the current value of \c variablename from the local context of a
function to the global context.
\section2 files(pattern[, recursive=false])
Expands the specified wildcard pattern and returns a list of filenames.
If \c recursive is true, this function descends into subdirectories.
\target forfunction
\section2 for(iterate, list)
Starts a loop that iterates over all values in \c list, setting \c iterate to each
value in turn. As a convenience, if \c list is 1..10 then iterate will
iterate over the values 1 through 10.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 65
\section2 greaterThan(variablename, value)
Tests that the value of \c variablename is greater than \c value. First,
this function attempts a numerical comparison. If at least one of the
operands fails to convert, this function does a string comparison.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 164
It is impossible to compare two numbers as strings directly. As a
workaround, construct temporary values with a non-numeric prefix and compare
these.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 172
See also \l{lessThan(variablename, value)}{lessThan()}.
\section2 if(condition)
Evaluates \c condition. It is used to group boolean expressions.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 166
\section2 include(filename)
Includes the contents of the file specified by \c filename into the
current project at the point where it is included. This function
succeeds if \c filename is included; otherwise it fails. The included
file is processed immediately.
You can check whether the file was included by using this function as
the condition for a scope. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 66
\section2 infile(filename, var, val)
Succeeds if the file \c filename (when parsed by qmake itself) contains the
variable \c var with a value of \c val; otherwise fails. If you do not
specify \c val, the function tests whether \c var has been assigned in
the file.
2941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010
\section2 isActiveConfig
This is an alias for the \c CONFIG function.
\section2 isEmpty(variablename)
Succeeds if the variable \c variablename is empty; otherwise fails.
This is the equivalent of \c{count( variablename, 0 )}.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 67
\section2 isEqual
This is an alias for the \c equals function.
\section2 lessThan(variablename, value)
Tests that the value of \c variablename is less than \c value. Works as
\l{greaterThan(variablename, value)}{greaterThan()}.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 165
\section2 load(feature)
Loads the feature file (\c .prf) specified by \c feature,
unless the feature has already been loaded.
\section2 log(message)
Prints a message on the console. Unlike the \c message function, neither
prepends text nor appends a line break.
See also \l{message(string)}{message()}.
\section2 message(string)
Always succeeds, and displays \c string as a general message to the user.
Unlike the \c error() function, this function allows processing to continue.
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 68
The above line causes "This is a message" to be written to the console.
The use of quotation marks is optional, but recommended.
\note By default, messages are written out for each Makefile generated by
qmake for a given project. If you want to ensure that messages only appear
once for each project, test the \c build_pass variable
\l{Scopes}{in conjunction with a scope} to filter out
messages during builds. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 69
\section2 mkpath(dirPath)
Creates the directory path \c dirPath. This function is a wrapper around the
QDir::makepath function.
\section2 requires(condition)
Evaluates \c condition. If the condition is false, qmake skips this
project (and its \l{SUBDIRS}) when building.
\note You can also use the \l{REQUIRES} variable for this purpose. However, we
recommend using this function, instead.
3011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080
\section2 system(command)
Executes the given \c command in a secondary shell. Succeeds
if the command returns with a zero exit status; otherwise fails.
You can check the return value of this function using a scope.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 71
See also the replace variant of \l{system(command[, mode])}{system()}.
\target touchfunction
\section2 touch(filename, reference_filename)
Updates the time stamp of \c filename to match the time stamp of
\c reference_filename.
\section2 unset(variablename)
Removes \c variablename from the current context.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 169
\section2 warning(string)
Always succeeds, and displays \c string as a warning message to the user.
\section2 write_file(filename, [variablename, [mode]])
Writes the values of \c variablename to a file with the name \c filename,
each value on a separate line. If \c variablename is not specified, creates
an empty file. If \c mode is \c append and the file already exists, appends
to it instead of replacing it.
\section1 Test Function Library
Complex test functions are implemented in a library of .prf files.
\section2 packagesExist(packages)
Uses the PKGCONFIG mechanism to determine whether or not the given packages
exist at the time of project parsing.
This can be useful to optionally enable or disable features. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 157
And then, in the code:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 158
*/
/*!
\page qmake-environment-reference.html
\contentspage {qmake Manual}{Contents}
\previouspage Using Precompiled Headers
\nextpage Reference
\title Configuring qmake
\section1 Properties
qmake has a system for persistent configuration, which allows you to set a
property in qmake once, and query it each time qmake is invoked. You can set
a property in qmake as follows:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 74
3081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150
The appropriate property and value should be substituted for
\c PROPERTY and \c VALUE.
You can retrieve this information back from qmake as follows:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 75
\note \c{qmake -query} lists built-in properties in addition to the
properties that you set with \c{qmake -set PROPERTY VALUE}.
This information will be saved into a QSettings object (meaning it
will be stored in different places for different platforms).
The following list summarizes the \c built-in properties:
\list
\li QMAKE_SPEC - the shortname of the host \c mkspec that is resolved
and stored in the \l{QMAKESPEC} variable during a host build
\li QMAKE_VERSION - the current version of qmake
\li QMAKE_XSPEC - the shortname of the target \c mkspec that is resolved
and stored in the \l{QMAKESPEC} variable during a target build
\li QT_HOST_BINS - location of host executables
\li QT_HOST_DATA - location of data for host executables used by qmake
\li QT_HOST_PREFIX - default prefix for all host paths
\li QT_INSTALL_ARCHDATA - location of general architecture-dependent Qt
data
\li QT_INSTALL_BINS - location of Qt binaries (tools and applications)
\li QT_INSTALL_CONFIGURATION - location for Qt settings. Not applicable
on Windows
\li QT_INSTALL_DATA - location of general architecture-independent Qt
data
\li QT_INSTALL_DOCS - location of documentation
\li QT_INSTALL_EXAMPLES - location of examples
\li QT_INSTALL_HEADERS - location for all header files
\li QT_INSTALL_IMPORTS - location of QML 1.x extensions
\li QT_INSTALL_LIBEXECS - location of executables required by libraries at runtime
\li QT_INSTALL_LIBS - location of libraries
\li QT_INSTALL_PLUGINS - location of Qt plugins
\li QT_INSTALL_PREFIX - default prefix for all paths
\li QT_INSTALL_QML - location of QML 2.x extensions
\li QT_INSTALL_TESTS - location of Qt test cases
\li QT_INSTALL_TRANSLATIONS - location of translation information for
Qt strings
\li QT_SYSROOT - the sysroot used by the target build environment
\li QT_VERSION - the Qt version. We recommend that you query Qt module specific
version numbers by using $$QT.<module>.version variables instead.
\endlist
For example, you can query the installation of Qt for this version of qmake with the
\c QT_INSTALL_PREFIX property:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 77
You can query the values of properties in a project file as follows:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 78
\target QMAKESPEC
\section1 QMAKESPEC
qmake requires a platform and compiler
description file which contains many default values used to generate
appropriate Makefiles. The standard Qt distribution comes with many of
these files, located in the \c mkspecs subdirectory of the Qt installation.
The \c QMAKESPEC environment variable can contain any of the following:
\list
\li A complete path to a directory containing a \c{qmake.conf} file.
3151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220
In this case qmake will open the
\c{qmake.conf} file from within that directory. If the file does not
exist, qmake will exit with an error.
\li The name of a platform-compiler combination. In this case,
qmake will search in the directory specified
by the \c mkspecs subdirectory of the data path specified when Qt was
compiled (see QLibraryInfo::DataPath).
\endlist
\note The \c QMAKESPEC path will automatically be added to the
\l{INCLUDEPATH} system variable.
\target cache
\section1 Cache File
The cache file is a special file qmake reads to
find settings not specified in the \c qmake.conf file, project files, or
at the command line. When qmake is run, it looks for a file called
\c{.qmake.cache} in parent directories of the current directory, unless you
specify \c -nocache. If qmake
fails to find this file, it will silently ignore this step of processing.
If qmake finds a \c{.qmake.cache} file then it will process this file first before
it processes the project file.
\target Extensions
\section1 File Extensions
Under normal circumstances qmake will try to
use appropriate file extensions for your platform. However, it is
sometimes necessary to override the default choices for each platform and
explicitly define file extensions for qmake to
use. This is achieved by redefining certain built-in variables. For
example, the extension used for \l moc files can be redefined with the
following assignment in a project file:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 85
The following variables can be used to redefine common file extensions recognized
by qmake:
\list
\li \l{QMAKE_EXT_MOC} modifies the extension placed on included moc files.
\li \l{QMAKE_EXT_UI} modifies the extension used for \QD UI files
(usually in \l{FORMS}).
\li \l{QMAKE_EXT_PRL} modifies the extension placed on
\l{#LibDepend}{library dependency files}.
\li \l{QMAKE_EXT_LEX} changes the suffix used in Lex files (usually in
\l{LEXSOURCES}).
\li \l{QMAKE_EXT_YACC} changes the suffix used in Yacc files (usually in
\l{YACCSOURCES}).
\li \l{QMAKE_EXT_OBJ} changes the suffix used on generated object files.
\endlist
All of the above accept just the first value, so you must assign to it just one
value that will be used throughout your project file. There are two variables that
accept a list of values:
\list
\li \l{QMAKE_EXT_CPP} causes qmake to interpret
all files with these suffixes as C++ source files.
\li \l{QMAKE_EXT_H} causes qmake to interpret
all files with these suffixes as C and C++ header files.
\endlist
*/
/*!
\page qmake-language.html
\title qmake Language
\contentspage {qmake Manual}{Contents}
3221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290
\previouspage Platform Notes
\nextpage Advanced Usage
Many qmake project files simply describe the
sources and header files used by the project, using a list of
\c{name = value} and \c{name += value} definitions.
qmake also provides other operators, functions,
and scopes that can be used to process the information supplied in
variable declarations. These advanced features allow Makefiles to be
generated for multiple platforms from a single project file.
\section1 Operators
In many project files, the assignment (\c{=}) and append (\c{+=}) operators can
be used to include all the information about a project. The typical pattern of
use is to assign a list of values to a variable, and append more values
depending on the result of various tests. Since
qmake defines certain variables using default
values, it is sometimes necessary to use the removal (\c{-=}) operator to
filter out values that are not required. The following sections describe how
to use operators to manipulate the contents of variables.
\section2 Assigning Values
The \c = operator assigns a value to a variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 89
The above line sets the \l{TARGET} variable to \c myapp. This will overwrite any
values previously set for \c TARGET with \c myapp.
\section2 Appending Values
The \c += operator appends a new value to the list of values in a variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 90
The above line appends \c USE_MY_STUFF to the list of pre-processor defines to be put
in the generated Makefile.
\section2 Removing Values
The \c -= operator removes a value from the list of values in a variable:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 91
The above line removes \c USE_MY_STUFF from the list of pre-processor defines to be
put in the generated Makefile.
\section2 Adding Unique Values
The \c *= operator adds a value to the list of values in a variable, but only
if it is not already present. This prevents values from being included many
times in a variable. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 92
In the above line, \c USE_MY_STUFF will only be added to the list of pre-processor
defines if it is not already defined. Note that the \l{unique}{unique()}
function can also be used to ensure that a variable only contains one
instance of each value.
\section2 Replacing Values
The \c ~= operator replaces any values that match a regular expression with
the specified value:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 93
In the above line, any values in the list that start with \c QT_D or \c QT_T are
3291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360
replaced with \c QT.
\section2 Variable Expansion
The \c $$ operator is used to extract the contents of a variable, and can be
used to pass values between variables or supply them to functions:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 94
Variables can be used to store the contents of environment variables.
These can be evaluated at the time when qmake
is run, or included in the generated Makefile for evaluation when the
project is built.
To obtain the contents of an environment value when
qmake is run, use the \c $$(...) operator:
\snippet doc/src/snippets/qmake/environment.pro 0
In the above assignment, the value of the \c PWD environment variable
is read when the project file is processed.
To obtain the contents of an environment value at the time when the
generated Makefile is processed, use the \c $(...) operator:
\snippet doc/src/snippets/qmake/environment.pro 1
In the above assignment, the value of \c PWD is read immediately
when the project file is processed, but \c $(PWD) is assigned to
\c DESTDIR in the generated Makefile. This makes the build process
more flexible as long as the environment variable is set correctly
when the Makefile is processed.
\section2 Accessing qmake Properties
The special \c $$[...] operator can be used to access qmake properties:
\snippet doc/src/snippets/qmake/qtconfiguration.pro 0
For more information, see \l{Configuring qmake}.
The properties accessible with this operator are typically used to
enable third party plugins and components to be integrated in Qt.
For example, a \QD plugin can be installed alongside \QD's built-in
plugins if the following declaration is made in its project file:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 101
\target Scopes
\section1 Scopes
Scopes are similar to \c if statements in procedural programming languages.
If a certain condition is true, the declarations inside the scope are processed.
\section2 Scope Syntax
Scopes consist of a condition followed by an opening brace on the same line,
a sequence of commands and definitions, and a closing brace on a new line:
\snippet doc/src/snippets/qmake/scopes.pro syntax
The opening brace \e{must be written on the same line as the condition}.
Scopes may be concatenated to include more than one condition, as described
in the following sections.
\section2 Scopes and Conditions
A scope is written as a condition followed by a series of declarations
contained within a pair of braces. For example:
3361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430
\snippet doc/src/snippets/qmake/scopes.pro 0
The above code will add the \c paintwidget_win.cpp file to the sources listed
in the generated Makefile when building for a Windows platform. When
building for other platforms, the define will be ignored.
The conditions used in a given scope can also be negated to provide an
alternative set of declarations that will be processed only if the
original condition is false. For example, to process something when building
for all platforms \e except Windows, negate the scope like this:
\snippet doc/src/snippets/qmake/scopes.pro 1
Scopes can be nested to combine more than one condition. For instance, to
include a particular file for a certain platform only if
debugging is enabled, write the following:
\snippet doc/src/snippets/qmake/scopes.pro 2
To save writing many nested scopes, you can nest scopes using the \c :
operator. The nested scopes in the above example can be rewritten in
the following way:
\snippet doc/src/snippets/qmake/scopes.pro 3
You may also use the \c : operator to perform single line conditional
assignments. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 95
The above line adds \c USE_MY_STUFF to the \l{DEFINES} variable only when
building for the Windows platform.
Generally, the \c : operator behaves like a logical AND operator, joining
together a number of conditions, and requiring all of them to be true.
There is also the \c | operator to act like a logical OR operator, joining
together a number of conditions, and requiring only one of them to be true.
\snippet doc/src/snippets/qmake/scopes.pro 4
You can also provide alternative declarations to those within a scope by
using an \c else scope. Each \c else scope is processed if the conditions
for the preceding scopes are false.
This allows you to write complex tests when combined with other scopes
(separated by the \c : operator as above). For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 96
\section2 Configuration and Scopes
The values stored in the \l{CONFIG} variable are
treated specially by qmake. Each of the possible
values can be used as the condition for a scope. For example, the list of
values held by \c CONFIG can be extended with the \c opengl value:
\snippet doc/src/snippets/qmake/configscopes.pro 0
As a result of this operation, any scopes that test for \c opengl will
be processed. We can use this feature to give the final executable an
appropriate name:
\snippet doc/src/snippets/qmake/configscopes.pro 1
\snippet doc/src/snippets/qmake/configscopes.pro 2
\snippet doc/src/snippets/qmake/configscopes.pro 3
This feature makes it easy to change the configuration for a project
without losing all the custom settings that might be needed for a specific
configuration. In the above code, the declarations in the first scope are
processed, and the final executable will be called \c application-gl.
However, if \c opengl is not specified, the declarations in the second
3431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500
scope are processed instead, and the final executable will be called
\c application.
Since it is possible to put your own values on the \c CONFIG
line, this provides you with a convenient way to customize project files
and fine-tune the generated Makefiles.
\section2 Platform Scope Values
In addition to the \c win32, \c macx, and \c unix values used in many
scope conditions, various other built-in platform and compiler-specific
values can be tested with scopes. These are based on platform
specifications provided in Qt's \c mkspecs directory. For example, the
following lines from a project file show the current specification in
use and test for the \c linux-g++ specification:
\snippet doc/src/snippets/qmake/specifications.pro 0
You can test for any other platform-compiler combination as long as a
specification exists for it in the \c mkspecs directory.
\target UsingVariables
\section1 Variables
Many of the variables used in project files are special variables that
qmake uses when generating Makefiles, such as \l{DEFINES}, \l{SOURCES}, and
\l{HEADERS}. In addition, you can create variables for your own use. qmake
creates new
variables with a given name when it encounters an assignment to that name.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 97
There are no restricitions on what you do to your own variables, as
qmake will ignore them unless it needs to evaluate them when processing
a scope.
You can also assign the value of a current variable to another
variable by prefixing $$ to the variable name. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 98
Now the MY_DEFINES variable contains what is in the DEFINES variable at
this point in the project file. This is also equivalent to:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 99
The second notation allows you to append the contents of the variable to
another value without separating the two with a space. For example, the
following will ensure that the final executable will be given a name
that includes the project template being used:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 100
\target UsingReplaceFunctions
\section1 Replace Functions
qmake provides a selection of built-in
functions to allow the contents of variables to be processed. These
functions process the arguments supplied to them and return a value, or
list of values, as a result. To assign a result to a variable, use the \c $$
operator with this type of function as you would to assign contents of one
variable to another:
\snippet doc/src/snippets/qmake/functions.pro 1
This type of function should be used on the right-hand side of
assignments (that is, as an operand).
You can define your own functions for processing the contents of variables
3501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570
as follows:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 102
The following example function takes a variable name as its only
argument, extracts a list of values from the variable with the
\l{eval(string)}{eval()} built-in function, and compiles a list of files:
\snippet doc/src/snippets/qmake/replacefunction.pro 0
\target UsingTestFunctions
\section1 Test Functions
qmake provides built-in functions that can be
used as conditions when writing scopes. These functions do not return a
value, but instead indicate \e success or \e failure:
\snippet doc/src/snippets/qmake/functions.pro 3
This type of function should be used in conditional expressions
only.
It is possible to define your own functions to provide conditions
for scopes. The following example tests whether each file in a list
exists and returns true if they all exist, or false if not:
\snippet doc/src/snippets/qmake/testfunction.pro 0
*/
/*!
\page qmake-advanced-usage.html
\title Advanced Usage
\contentspage {qmake Manual}{Contents}
\previouspage qmake Language
\nextpage Using Precompiled Headers
\section1 Adding New Configuration Features
qmake lets you create your own \c features that
can be included in project files by adding their names to the list of
values specified by the \l{CONFIG} variable. Features are collections of
custom functions and definitions in \c{.prf} files that can reside in one
of many standard directories. The locations of these directories are
defined in a number of places, and qmake checks
each of them in the following order when it looks for \c{.prf} files:
\omit
TODO: Fix the list, as it is incomplete and partly incorrect.
\endomit
\list 1
\li In a directory listed in the \c QMAKEFEATURES environment variable that
contains a colon-separated list of directories.
\li In a directory listed in the \c QMAKEFEATURES property variable that
contains a colon-spearated list of directories.
\omit
\li In a features directory beneath the project's root directory (where
the \c{.qmake.cache} file is generated).
\endomit
\li In a features directory residing within a \c mkspecs directory.
\c mkspecs directories can be located beneath any of the directories
listed in the \c QMAKEPATH environment variable that contains a
colon-separated list of directories. For example:
\c{$QMAKEPATH/mkspecs/<features>}.
\li In a features directory residing beneath the directory provided by the
\l{QMAKESPEC} environment variable. For example: \c{$QMAKESPEC/<features>}.
\li In a features directory residing in the \c data_install/mkspecs directory.
For example: \c{data_install/mkspecs/<features>}.
\li In a features directory that exists as a sibling of the directory
specified by the \c QMAKESPEC environment variable.
3571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640
For example: \c{$QMAKESPEC/../<features>}.
\endlist
The following features directories are searched for features files:
\list 1
\li \c{features/unix}, \c{features/win32}, or \c{features/macx}, depending on
the platform in use
\li \c features/
\endlist
For example, consider the following assignment in a project file:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 103
With this addition to the \c CONFIG variable,
qmake will search the locations listed above for
the \c myfeatures.prf file after it has finished parsing your project file.
On Unix systems, it will look for the following file:
\list 1
\li \c $QMAKEFEATURES/myfeatures.prf (for each directory listed in the
\c QMAKEFEATURES environment variable)
\li \c $$QMAKEFEATURES/myfeatures.prf (for each directory listed in the
\c QMAKEFEATURES property variable)
\li \c myfeatures.prf (in the project's root directory)
\li \c $QMAKEPATH/mkspecs/features/unix/myfeatures.prf and
\c $QMAKEPATH/mkspecs/features/myfeatures.prf (for each directory
listed in the \c QMAKEPATH environment variable)
\li \c $QMAKESPEC/features/unix/myfeatures.prf and
\c $QMAKESPEC/features/myfeatures.prf
\li \c data_install/mkspecs/features/unix/myfeatures.prf and
\c data_install/mkspecs/features/myfeatures.prf
\li \c $QMAKESPEC/../features/unix/myfeatures.prf and
\c $QMAKESPEC/../features/myfeatures.prf
\endlist
\note The \c{.prf} files must have names in lower case.
\section1 Installing Files
It is common on Unix to also use the build tool to install applications
and libraries; for example, by invoking \c{make install}. For this reason,
qmake has the concept of an \c {install set}, an
object which contains instructions about the way a part of a project is to
be installed. For example, a collection of documentation files can be
described in the following way:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 79
The \c path member informs qmake that the files
should be installed in \c /usr/local/program/doc (the path member), and the
\c files member specifies the files that should be copied to the
installation directory. In this case, everything in the \c docs directory
will be copied to \c /usr/local/program/doc.
Once an install set has been fully described, you can append it to the
install list with a line like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 80
qmake will ensure that the specified files are
copied to the installation directory. If you require more control over
this process, you can also provide a definition for the \c extra member of
the object. For example, the following line tells
qmake to execute a series of commands for this
install set:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 81
3641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710
The \c unix \l{Scopes and Conditions}{scope}
ensures that these particular commands are only executed on Unix platforms.
Appropriate commands for other platforms can be defined using other scope
rules.
Commands specified in the \c extra member are executed before the instructions
in the other members of the object are performed.
If you append a built-in install set to the \c INSTALLS variable and do
not specify \c files or \c extra members, qmake
will decide what needs to be copied for you. Currently, the \c target and \c dlltarget
install sets are supported. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 82
In the above lines, qmake knows what needs to
be copied, and will handle the installation process automatically.
\section1 Adding Custom Targets
qmake tries to do everything expected of a
cross-platform build tool. This is often less than ideal when you really
need to run special platform-dependent commands. This can be achieved with
specific instructions to the different qmake backends.
Customization of the Makefile output is performed through an object-style
API as found in other places in qmake. Objects are defined automatically by
specifying their \e members. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 86
The definitions above define a qmake target called \c mytarget, containing a
Makefile target called \c{.buildfile} which in turn is generated with the
\l{touchfunction}{touch()} function. Finally, the
\c{.depends} member specifies that \c mytarget depends on \c mytarget2,
another target that is defined afterwards. \c mytarget2 is a dummy target.
It is only defined to echo some text to the console.
The final step is to use the \c QMAKE_EXTRA_TARGETS variable to instruct
qmake that this object is a target to be built:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 87
This is all you need to do to actually build custom targets. Of course,
you may want to tie one of these targets to the
\l{TARGET}{qmake build target}. To do this, you
simply need to include your Makefile target in the list of
\l{PRE_TARGETDEPS}.
Custom target specifications support the following members:
\table
\header
\li Member
\li Description
\row
\li commands
\li The commands for generating the custom build target.
\row
\li CONFIG
\li Specific configuration options for the custom build target. Can be
set to \c recursive to indicate that rules should be created in the
Makefile to call the relevant target inside the sub-target specific
Makefile. This member defaults to creating an entry for each of the
sub-targets.
\row
\li depends
\li The existing build targets that the custom build target depends on.
\row
\li recurse
3711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780
\li Specifies which sub-targets should be used when creating the rules
in the Makefile to call in the sub-target specific Makefile. This
member is used only when \c recursive is set in \c CONFIG. Typical
values are "Debug" and "Release".
\row
\li recurse_target
\li Specifies the target that should be built via the sub-target
Makefile for the rule in the Makefile. This member adds something
like \c {$(MAKE) -f Makefile.[subtarget] [recurse_target]}. This
member is used only when \c recursive is set in \c CONFIG.
\row
\li target
\li The name of the custom build target.
\endtable
\section1 Adding Compilers
It is possible to customize qmake to support new compilers and
preprocessors:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 88
With the above definitions, you can use a drop-in replacement for moc if one
is available. The command is executed on all arguments given to the
\c NEW_HEADERS variable (from the \c input member), and the result is written
to the file defined by the \c output member. This file is added to the
other source files in the project. Additionally, qmake will execute
\c depend_command to generate dependency information, and place this
information in the project as well.
Custom compiler specifications support the following members:
\table
\header
\li Member
\li Description
\row
\li commands
\li The commands used for for generating the output from the input.
\row
\li CONFIG
\li Specific configuration options for the custom compiler. See the
CONFIG table for details.
\row
\li depend_command
\li Specifies a command used to generate the list of dependencies for
the output.
\row
\li dependency_type
\li Specifies the type of file the output is. If it is a known type
(such as TYPE_C, TYPE_UI, TYPE_QRC), it is handled as one of those
type of files.
\row
\li depends
\li Specifies the dependencies of the output file.
\row
\li input
\li The variable that specifies the files that should be processed with
the custom compiler.
\row
\li name
\li A description of what the custom compiler is doing. This is only
used in some backends.
\row
\li output
\li The filename that is created from the custom compiler.
\row
\li output_function
\li Specifies a custom qmake function that is used to specify the
filename to be created.
3781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850
\row
\li variables
\li Indicates that the variables specified here are replaced with
$(QMAKE_COMP_VARNAME) when referred to in the pro file as
$(VARNAME).
\row
\li variable_out
\li The variable that the files created from the output should be added
to.
\endtable
The CONFIG member supports the following options:
\table
\header
\li Option
\li Description
\row
\li combine
\li Indicates that all of the input files are combined into a single
output file.
\row
\li target_predeps
\li Indicates that the output should be added to the list of
\l{PRE_TARGETDEPS}.
\row
\li explicit_dependencies
\li The dependencies for the output only get generated from the depends
member and from nowhere else.
\row
\li no_link
\li Indicates that the output should not be added to the list of objects
to be linked in.
\endtable
\target LibDepend
\section1 Library Dependencies
Often when linking against a library, qmake
relies on the underlying platform to know what other libraries this
library links against, and lets the platform pull them in. In many cases,
however, this is not sufficient. For example, when statically linking a
library, no other libraries are linked to, and therefore no dependencies
to those libraries are created. However, an application that later links
against this library will need to know where to find the symbols that
the static library will require. qmake attempts to keep track of the
dependencies of a library, where appropriate, if you explicitly enable
tracking.
The first step is to enable dependency tracking in the library itself.
To do this you must tell qmake to save information about the library:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 83
This is only relevant to the \c lib template, and will be ignored for all
others. When this option is enabled, qmake will create a file ending in .prl
which will save some meta-information about the library. This metafile is
just like an ordinary project file, but only contains internal variable
declarations. When installing this library, by specifying it as a target in
an \l{INSTALLS} declaration, qmake will automatically copy the .prl file to
the installation path.
The second step in this process is to enable reading of this meta
information in the applications that use the static library:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 84
When this is enabled, qmake will process all
libraries linked to by the application and find their meta-information.
qmake will use this to determine the relevant
3851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920
linking information, specifically adding values to the application project
file's list of \l{DEFINES} as well as \l{LIBS}. Once
qmake has processed this file, it will then
look through the newly introduced libraries in the \c LIBS variable, and
find their dependent .prl files, continuing until all libraries have been
resolved. At this point, the Makefile is created as usual, and the
libraries are linked explicitly against the application.
The .prl files should be created by qmake only, and should not be
transferred between operating systems, as they may contain
platform-dependent information.
*/
/*!
\page qmake-precompiledheaders.html
\title Using Precompiled Headers
\contentspage {qmake Manual}{Contents}
\previouspage Advanced Usage
\nextpage Configuring qmake
\target Introduction
Precompiled headers (PCH) are a performance feature supported by some
compilers to compile a stable body of code, and store the compiled
state of the code in a binary file. During subsequent compilations,
the compiler will load the stored state, and continue compiling the
specified file. Each subsequent compilation is faster because the
stable code does not need to be recompiled.
qmake supports the use of precompiled headers
on some platforms and build environments, including:
\list
\li Windows
\list
\li nmake
\li Visual Studio projects (VS 2008 and later)
\endlist
\li Mac OS X
\list
\li Makefile
\li Xcode
\endlist
\li Unix
\list
\li GCC 3.4 and above
\endlist
\endlist
\target ADD_PCH
\section1 Adding Precompiled Headers to Your Project
The precompiled header must contain code which is \e stable
and \e static throughout your project. A typical precompiled header might
look like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.cpp 104
\note A precompiled header file needs to separate C includes from
C++ includes, since the precompiled header file for C files may not
contain C++ code.
\target PROJECT_OPTIONS
\section2 Project Options
To make your project use precompiled headers, you only need to define the
\l{PRECOMPILED_HEADER} variable in your project file:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 105
qmake will handle the rest, to ensure the
3921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990
creation and use of the precompiled header file. You do not need to
include the precompiled header file in \c HEADERS, as
qmake will do this if the configuration supports precompiled headers.
All platforms that support precompiled headers have the configuration
option \c precompile_header set. Using this option, you may trigger
conditional blocks in your project file to add settings when using
precompiled headers.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 106
\section1 Notes on Possible Issues
On some platforms, the file name suffix for precompiled header files is
the same as that for other object files. For example, the following
declarations may cause two different object files with the same name to
be generated:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 107
To avoid potential conflicts like these, give distinctive names to header
files that will be precompiled.
\target EXAMPLE_PROJECT
\section1 Example Project
You can find the following source code in the
\c{examples/qmake/precompile} directory in the Qt distribution:
\section2 \c mydialog.ui
The following image displays the mydialog.ui file in Qt Creator Design mode.
You can view the code in the Edit mode.
\image qmake-precompile-ui.png
\section2 \c stable.h
\snippet snippets/qmake/precompile-stable.h 0
\omit
##Keeping the snippet in qtdoc is a workaround, because it contains code
that would tell qdoc to start a new page. Remove it and put the
following snippet back after modularizing the docs.
\snippet examples/qmake/precompile/stable.h 0
\endomit
\section2 \c myobject.h
\code
#include <QObject>
class MyObject : public QObject
{
public:
MyObject();
~MyObject();
};
\endcode
\omit
##Remove the code and put the snippets back after modularizing the docs.
\snippet examples/qmake/precompile/myobject.h 0
\endomit
\section2 \c myobject.cpp
\code
#include <iostream>
3991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060
#include <QDebug>
#include <QObject>
#include "myobject.h"
MyObject::MyObject()
: QObject()
{
std::cout << "MyObject::MyObject()\n";
}
\endcode
\omit
\snippet examples/qmake/precompile/myobject.cpp 0
\endomit
\section2 \c util.cpp
\code
void util_function_does_nothing()
{
// Nothing here...
int x = 0;
++x;
}
\endcode
\omit
\snippet examples/qmake/precompile/util.cpp 0
\endomit
\section2 \c main.cpp
\code
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include "myobject.h"
#include "mydialog.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyObject obj;
MyDialog dialog;
dialog.connect(dialog.aButton, SIGNAL(clicked()), SLOT(close()));
dialog.show();
return app.exec();
}
\endcode
\omit
\snippet examples/qmake/precompile/main.cpp 0
\endomit
\section2 \c precompile.pro
\code
TEMPLATE = app
LANGUAGE = C++
CONFIG += console precompile_header
CONFIG -= app_bundle
# Use Precompiled headers (PCH)
PRECOMPILED_HEADER = stable.h
HEADERS = stable.h \
mydialog.h \
4061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130
myobject.h
SOURCES = main.cpp \
mydialog.cpp \
myobject.cpp \
util.cpp
FORMS = mydialog.ui
\endcode
\omit
\snippet examples/qmake/precompile/precompile.pro 0
\endomit
*/
/*!
\page qmake-tutorial.html
\title Getting Started
\contentspage {qmake Manual}{Contents}
\previouspage Overview
\nextpage Creating Project Files
This tutorial teaches you the basics of qmake. The other topics in this
manual contain more detailed information about using qmake.
\section1 Starting off Simple
Let's assume that you have just finished a basic implementation of
your application, and you have created the following files:
\list
\li hello.cpp
\li hello.h
\li main.cpp
\endlist
You will find these files in the \c{examples/qmake/tutorial} directory
of the Qt distribution. The only other thing you know about the setup of
the application is that it's written in Qt. First, using your favorite
plain text editor, create a file called \c hello.pro in
\c{examples/qmake/tutorial}. The first thing you need to do is add the
lines that tell qmake about the source and
header files that are part of your development project.
We'll add the source files to the project file first. To do this you
need to use the \l{SOURCES} variable.
Just start a new line with \c {SOURCES +=} and put hello.cpp after it.
You should have something like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 108
We repeat this for each source file in the project, until we end up
with the following:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 109
If you prefer to use a Make-like syntax, with all the files listed in
one go you can use the newline escaping like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 110
Now that the source files are listed in the project file, the header
files must be added. These are added in exactly the same way as source
files, except that the variable name we use is \l{HEADERS}.
Once you have done this, your project file should look something like
this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 111
The target name is set automatically. It is the same as the project
filename, but with the suffix appropriate for the platform. For example, if
4131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200
the project file is called \c hello.pro, the target will be \c hello.exe
on Windows and \c hello on Unix. If you want to use a different name
you can set it in the project file:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 112
The finished project file should look like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 113
You can now use qmake to generate a Makefile
for your application. On the command line, in your project directory,
type the following:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 114
Then type \c make or \c nmake depending on the compiler you use.
For Visual Studio users, qmake can also generate Visual Studio project
files. For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 115
\section1 Making an Application Debuggable
The release version of an application does not contain any debugging
symbols or other debugging information. During development, it is useful
to produce a debugging version of the application that has the
relevant information. This is easily achieved by adding \c debug to the
\l{CONFIG} variable in the project file.
For example:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 116
Use qmake as before to generate a Makefile. You will now obtain useful
information about your application when running it in a debugging
environment.
\section1 Adding Platform-Specific Source Files
After a few hours of coding, you might have made a start on the
platform-specific part of your application, and decided to keep the
platform-dependent code separate. So you now have two new files to
include into your project file: \c hellowin.cpp and \c
hellounix.cpp. We cannot just add these to the \c SOURCES
variable since that would place both files in the Makefile. So, what we
need to do here is to use a scope which will be processed depending on
which platform we are building for.
A simple scope that adds the platform-dependent file for
Windows looks like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 117
When building for Windows, qmake adds \c hellowin.cpp to the list of source
files. When building for any other platform, qmake simply ignores it. Now
all that is left to be done is to create a scope for the Unix-specific file.
When you have done that, your project file should look
something like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 118
Use qmake as before to generate a Makefile.
\section1 Stopping qmake If a File Does Not Exist
You may not want to create a Makefile if a certain file does not exist.
We can check if a file exists by using the \l{exists(filename)}{exists()}
4201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270
function. We can stop qmake from processing by using the \l{error(string)}
{error()} function. This works in the same way as scopes do. Simply replace
the scope condition with the function. A check for a file called main.cpp looks
like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 119
The \c{!} symbol is used to negate the test. That is, \c{exists( main.cpp )}
is true if the file exists, and \c{!exists( main.cpp )} is true if the
file does not exist.
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 120
Use qmake as before to generate a makefile.
If you rename \c main.cpp temporarily, you will see the message and
qmake will stop processing.
\section1 Checking for More than One Condition
Suppose you use Windows and you want to be able to see statement
output with \c {qDebug()} when you run your application on the command line.
To see the output, you must build your application with the appropriate
console setting. We can easily put \c console on the \c CONFIG
line to include this setting in the Makefile on Windows. However,
let's say that we only want to add the \c CONFIG line when we are running
on Windows \e and when \c debug is already on the \c CONFIG line.
This requires using two nested scopes. First create one scope, then create
the other inside it. Put the settings to be processed inside the second
scope, like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 121
Nested scopes can be joined together using colons, so the final
project file looks like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 122
That's it! You have now completed the tutorial for
qmake, and are ready to write project files for
your development projects.
*/
/*!
\page qmake-common-projects.html
\title Building Common Project Types
\contentspage {qmake Manual}{Contents}
\previouspage Creating Project Files
\nextpage Running qmake
This chapter describes how to set up qmake project files for three common
project types that are based on Qt: application, library, and plugin.
Although all project types use many of the same variables, each of
them uses project-specific variables to customize output files.
Platform-specific variables are not described here. For more information,
see \l{Deploying an Application on Windows} and
\l{Developing Qt Applications for Mac OS X}.
\target Application
\section1 Building an Application
The \c app template tells qmake to generate a
Makefile that will build an application. With this template, the type of
application can be specified by adding one of the following options to the
\l{CONFIG} variable definition:
\table
\header \li Option \li Description
\row \li windows \li The application is a Windows GUI application.
\row \li console \li \c app template only: the application is a Windows console
4271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340
application.
\row \li testcase \li The application is \l{Building a Testcase}{an automated test}.
\endtable
When using this template, the following qmake
system variables are recognized. You should use these in your .pro file to
specify information about your application.
\list
\li \l{HEADERS} - A list of header files for the application.
\li \l{SOURCES} - A list of C++ source files for the application.
\li \l{FORMS} - A list of UI files for the application (created using
Qt Designer).
\li \l{LEXSOURCES} - A list of Lex source files for the application.
\li \l{YACCSOURCES} - A list of Yacc source files for the
application.
\li \l{TARGET} - Name of the executable for the application. This defaults
to the name of the project file. (The extension, if any, is added
automatically).
\li \l{DESTDIR} - The directory in which the target executable is placed.
\li \l{DEFINES} - A list of any additional pre-processor defines needed for
the application.
\li \l{INCLUDEPATH} - A list of any additional include paths needed for the
application.
\li \l{DEPENDPATH} - The dependency search path for the application.
\li \l{VPATH} - The search path to find supplied files.
\li \l{DEF_FILE} - Windows only: A .def file to be linked against for the
application.
\li \l{RC_FILE} - Windows only: A resource file for the application.
\li \l{RES_FILE} - Windows only: A resource file to be linked against for
the application.
\endlist
You only need to use the system variables that you have values for. For
example, if you do not have any extra INCLUDEPATHs then you do not need
to specify any. qmake will add the necessary default values.
An example project file might look like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 123
For items that are single valued, such as the template or the destination
directory, we use "="; but for multi-valued items we use "+=" to \e
add to the existing items of that type. Using "=" replaces the variable
value with the new value. For example, if we write \c{DEFINES=USE_MY_STUFF},
all other definitions are deleted.
\section1 Building a Testcase
A testcase project is an \c app project intended to be run as an automated
test. Any \c app may be marked as a testcase by adding the value \c testcase
to the \c CONFIG variable.
For testcase projects, qmake will insert a \c check
target into the generated Makefile. This target will run the application.
The test is considered to pass if it terminates with an exit code equal to zero.
The \c check target automatically recurses through
\l{SUBDIRS} projects. This means it is
possible to issue a \c{make check} command from within a SUBDIRS project
to run an entire test suite.
The execution of the \c check target may be customized by certain Makefile
variables. These variables are:
\table
\header
\li Variable
\li Description
\row
\li TESTRUNNER
4341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410
\li A command or shell fragment prepended to each test command. An example
use-case is a "timeout" script which will terminate a test if it does not
complete within a specified time.
\row
\li TESTARGS
\li Additional arguments appended to each test command. For example, it may
be useful to pass additional arguments to set the output file and format
from the test (such as the \c{-o filename,format} option supported by
\l{QTestLib}).
\endtable
\note The variables must be set while invoking the \c make tool, not in the
.pro file. Most \c make tools support the setting of Makefile variables directly
on the command-line:
\code
# Run tests through test-wrapper and use xunitxml output format.
# In this example, test-wrapper is a fictional wrapper script which terminates
# a test if it does not complete within the amount of seconds set by "--timeout".
# The "-o result.xml,xunitxml" options are interpreted by QTestLib.
make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,xunitxml"
\endcode
Testcase projects may be further customized with the following \c CONFIG options:
\table
\header
\li Option
\li Description
\row
\li insignificant_test
\li The exit code of the test will be ignored during \c{make check}.
\endtable
Testcases will often be written with \l{QTest} or \l{TestCase}, but
that is not a requirement to make use of \c{CONFIG+=testcase} and \c{make check}.
The only primary requirement is that the test program exit with a zero exit code
on success, and a non-zero exit code on failure.
\target Library
\section1 Building a Library
The \c lib template tells qmake to generate a Makefile that will build a
library. When using this template, the \l{VERSION} variable is supported,
in addition to the system variables that the \c app template supports. Use
the variables in your .pro file to specify information about the library.
When using the \c lib template, the following options can be added to the
\l{CONFIG} variable to determine the type of library that is built:
\table
\header \li Option \li Description
\row \li dll \li The library is a shared library (dll).
\row \li staticlib \li The library is a static library.
\row \li plugin \li The library is a plugin.
\endtable
The following option can also be defined to provide additional information about
the library.
\list
\li VERSION - The version number of the target library. For example, 2.3.1.
\endlist
The target file name for the library is platform-dependent. For example, on
X11 and Mac OS X, the library name will be prefixed by \c lib. On Windows,
no prefix is added to the file name.
\target Plugin
\section1 Building a Plugin
4411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480
Plugins are built using the \c lib template, as described in the previous
section. This tells qmake to generate a
Makefile for the project that will build a plugin in a suitable form for
each platform, usually in the form of a library. As with ordinary
libraries, the \l{VERSION} variable is used to specify information about the
plugin.
\list
\li VERSION - The version number of the target library. For example, 2.3.1.
\endlist
\section2 Building a Qt Designer Plugin
\QD plugins are built using a specific set of configuration settings that
depend on the way Qt was configured for your system. For convenience, these
settings can be enabled by adding \c designer to the \l{Variables#QT}{QT}
variable. For example:
\code
QT += widgets designer
\endcode
See the \l{Qt Designer Examples} for more examples of plugin-based projects.
\section1 Building and Installing in Debug and Release Modes
Sometimes, it is necessary to build a project in both debug and release
modes. Although the \l{CONFIG} variable can hold both \c debug and \c release
options, the \c debug option overrides the \c release option.
\section2 Building in Both Modes
To enable a project to be built in both modes, you must add the
\c debug_and_release option to the \c CONFIG variable:
\snippet doc/src/snippets/qmake/debug_and_release.pro 0
\snippet doc/src/snippets/qmake/debug_and_release.pro 1
The scope in the above snippet modifies the build target in each mode to
ensure that the resulting targets have different names. Providing different
names for targets ensures that one will not overwrite the other.
When qmake processes the project file, it will
generate a Makefile rule to allow the project to be built in both modes.
This can be invoked in the following way:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 124
The \c build_all option can be added to the \c CONFIG variable in the
project file to ensure that the project is built in both modes by default:
\snippet doc/src/snippets/qmake/debug_and_release.pro 2
This allows the Makefile to be processed using the default rule:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 125
\section2 Installing in Both Modes
The \c build_all option also ensures that both versions of the target
will be installed when the installation rule is invoked:
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 126
It is possible to customize the names of the build targets depending on
the target platform. For example, a library or plugin may be named using a
different convention on Windows from the one used on Unix platforms:
\omit
448144824483448444854486448744884489449044914492
Note: This was originally used in the customwidgetplugin.pro file, but is
no longer needed there.
\endomit
\snippet doc/src/snippets/code/doc_src_qmake-manual.pro 127
The default behavior in the above snippet is to modify the name used for
the build target when building in debug mode. An \c else clause could be
added to the scope to do the same for release mode. Left as it is, the
target name remains unmodified.
*/