blob: 33ad78f540b9d20cfd782d4519d9c604440c81ce [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** 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 The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/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: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\page qmake-manual.html
\title qmake Manual
\startpage index.html
\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}
\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
\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{Qt Creator: Creating Projects}{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
\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
\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 qmake/variables.pro 0
The list of values in a variable is extended in the following way:
\snippet qmake/variables.pro 1
\note The first assignment only includes values that are specified on
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 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 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 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 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
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 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 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 aux \li Makefile to build nothing. Use this if no compiler needs to
be invoked to create the target, for instance because your
project is written in an interpreted language.
\note This template type is only available for Makefile-based
generators. In particular, it will not work with the vcxproj and
Xcode generators.
\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.
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 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 qmake/configscopes.pro 4
\snippet 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 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 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 code/doc_src_qmake-manual.pro 3
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 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 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 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 code/doc_src_qmake-manual.pro 7
*/
/*!
\page qmake-running.html
\title Running qmake
\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 code/doc_src_qmake-manual.pro 8
\section1 Operating Modes
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.
\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 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 code/doc_src_qmake-manual.pro 10
However, some of the specified options can be omitted as they are default
values:
\snippet 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 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.
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
\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 \macos, iOS, tvOS, and watchOS
Features specific to these platforms 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 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
\macos, 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{LIBS} variable, as shown in the following example:
\snippet 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 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 code/doc_src_qmake-manual.pro 16
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 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{Qt for macOS - Deployment} for more information about
deploying applications and libraries.
\section2 Creating and Moving Xcode Projects
Developers on \macos can take advantage of the qmake support for Xcode
project files, as described in \l{Qt for macOS#Additional Command-Line Options}{Qt for \macos} documentation.
by running qmake to generate an Xcode project from an existing qmake project
file. For example:
\snippet 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 Windows resource
files (provided or auto-generated), creating Visual Studio project files,
and handling manifest files when deploying Qt applications developed
using Visual Studio 2005, or later.
\section2 Adding Windows Resource Files
This section describes how to handle a Windows resource file with
qmake to have it linked to an application executable (EXE) or dynamic
link library (DLL). qmake can optionally auto-generate a suitably
filled Windows resource file.
A linked Windows resource file may contain many elements that can
be accessed by its EXE or DLL. However, the
\l{The Qt Resource System}{Qt resource system} should be used for
accessing linked-in resources in a platform-independent way. But
some standard elements of the linked Windows resource file are
accessed by Windows itself. For example, in Windows explorer the
version tab of the file properties is filled by resource elements.
In addition, the program icon of the EXE is read from these elements.
So it is good practice for a Qt created Windows EXE or DLL to use
both techniques at the same time: link platform-independent resources
via the \l{The Qt Resource System}{Qt resource system} and add Windows
specific resources via a Windows resource file.
Typically, a resource-definition script (.rc file) is compiled to a
Windows resource file. Within the Microsoft toolchain, the RC tool
generates a .res file, which can be linked with the Microsoft linker
to an EXE or DLL. The MinGW toolchain uses the windres tool to generate
an .o file that can be linked with the MinGW linker to an EXE or DLL.
The optional auto-generation of a suitably filled .rc file by qmake is
triggered by setting at least one of the system variables \l{VERSION}
and \l{RC_ICONS}. The generated .rc file is automatically compiled and
linked. Elements that are added to the .rc file are defined by the system
variables \l{QMAKE_TARGET_COMPANY}, \l{QMAKE_TARGET_DESCRIPTION},
\l{QMAKE_TARGET_COPYRIGHT}, \l{QMAKE_TARGET_PRODUCT}, \l{QMAKE_MANIFEST},
\l{RC_CODEPAGE}, \l{RC_ICONS}, \l{RC_LANG} and \l{VERSION}.
If these elements are not sufficient, qmake has the two system variables
\l{RC_FILE} and \l{RES_FILE} that point directly to an externally created
.rc or .res file. By setting one of these variables, the specified file
is linked to the EXE or DLL.
\note The generation of the .rc file by qmake is blocked, if \l{RC_FILE}
or \l{RES_FILE} is set. In this case, no further changes are made to the
given .rc file or the .res or .o file by qmake; the variables pertaining
to .rc file generation have no effect.
\section2 Creating Visual Studio Project Files
This section describes how 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 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 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 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 code/doc_src_qmake-manual.pro 23
This is discussed in more detail in the
\l{Qt for Windows - Deployment#Manifest files}
{deployment guide for Windows}.
*/
/*!
\page qmake-reference.html
\title Reference
\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:
\list
\li \l{Replace Functions}
\li \l{Test Functions}
\endlist
*/
/*!
\page qmake-variable-reference.html
\title Variables
\previouspage Reference
\nextpage Replace Functions
\keyword qmake Variable Reference
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, a makespec may use \c QMAKE_LIBS
to specify a list of libraries that each project needs to link against,
and \c QMAKE_LIBS_X11 would be used to extend this list.
\target ANDROID_ABI
\section1 ANDROID_ABI
\note This variable applies only to Android targets.
Specifies the Android target ABI. Valid values are: armeabi-v7a, arm64-v8a,
x86, x86_64.
\target ANDROID_ABIS
\section1 ANDROID_ABIS
\note This variable applies only to Android targets.
Specifies a list of Android target ABIs. Valid values are: armeabi-v7a,
arm64-v8a, x86, x86_64.
You can provide the ABIs as a qmake argument:
\badcode
qmake ANDROID_ABIS="armeabi-v7a arm64-v8a"
\endcode
Or directly in the \c .pro file:
\badcode
ANDROID_ABIS = \
armeabi-v7a \
arm64-v8a
\endcode
\target ANDROID_API_VERSION
\section1 ANDROID_API_VERSION
\note This variable applies only to Android targets.
Specifies the Android API level number. For more information, see
\l{Android: Build Numbers}{Android Build Numbers}.
\target ANDROID_BUNDLED_JAR_DEPENDENCIES
\section1 ANDROID_BUNDLED_JAR_DEPENDENCIES
\note This variable applies only to Android modules.
This is useful when writing a Qt module. It specifies a list of pre-bundled
dependencies used by the module in a \c .jar format, for example:
\badcode
ANDROID_BUNDLED_JAR_DEPENDENCIES += jar/QtAndroid.jar
\endcode
\target ANDROID_DEPLOYMENT_DEPENDENCIES
\section1 ANDROID_DEPLOYMENT_DEPENDENCIES
\note This variable applies only to Android targets.
By default, \l androiddeployqt will detect the dependencies of your
application. However, since run-time usage of plugins cannot be detected,
there could be false positives, as your application might depend on any
plugin that is a potential dependency. If you want to minimize the size of
your \c APK, it's possible to override the automatic detection using the
this variable. This should contain a list of all Qt files which need to be
included, with paths relative to the Qt install root.
\note Only the Qt files specified with this variable are included. Failing
to include all the correct files can result in crashes. It's also important
to make sure the files are listed in the correct loading order. This variable
provides a way to override the automatic detection entirely, so if a library
is listed before its dependencies, it will fail to load on some devices.
\target ANDROID_DEPLOYMENT_SETTINGS_FILE
\section1 ANDROID_DEPLOYMENT_SETTINGS_FILE
\note This variable applies only to Android targets.
Specifies the path to the \c {android-deployment-settings.json} file needed
by \l androiddeployqt and \c androidtestrunner. This overrides the path to
the settings file generated by qmake, thus you have to make sure to provide
a valid settings file.
\target ANDROID_EXTRA_LIBS
\section1 ANDROID_EXTRA_LIBS
\note This variable applies only to Android targets.
A list of external libraries that will be copied into your application's
\c libs folder and loaded on start-up. This can be used, for instance,
to enable OpenSSL in your application. For more information, see
\l{Adding OpenSSL Support for Android}.
\target ANDROID_EXTRA_PLUGINS
\section1 ANDROID_EXTRA_PLUGINS
\note This variable applies only to Android targets.
Specifies different resources that your application has to bundle but that
cannot be delivered through the assets system, such as QML plugins. With this
variable, \l androiddeployqt will make sure everything is packaged and
deployed properly.
\target ANDROID_FEATURES
\section1 ANDROID_FEATURES
\note This variable applies only to Android modules.
Specifies a module's features list:
\badcode
ANDROID_FEATURES += android.hardware.location.gps
\endcode
For more information, see \l{Android: <uses-feature>}{Android <uses-feature> Docs}.
\target ANDROID_LIB_DEPENDENCIES
\section1 ANDROID_LIB_DEPENDENCIES
\note This variable applies only to Android modules.
This is useful when writing a Qt module. It specifies a list of pre-built
dependencies used by the module, for example:
\badcode
ANDROID_LIB_DEPENDENCIES += \
plugins/libplugins_platforms_qtforandroid.so
\endcode
\target ANDROID_MIN_SDK_VERSION
\section1 ANDROID_MIN_SDK_VERSION
\note This variable applies only to Android targets.
Specifies the minimum Android API level for the project. By default, this
variable is set to API level 21.
\target ANDROID_PACKAGE_SOURCE_DIR
\section1 ANDROID_PACKAGE_SOURCE_DIR
\note This variable applies only to Android targets.
Specifies the path for a custom Android package template. The Android package
template contains:
\list
\li AndroidManifest.xml file
\li build.gradle file and other Gradle scripts
\li res/values/libs.xml file
\endlist
The path specified by this variable can contain custom Java classes under
\c src directory. By default, the \l androiddeployqt tool copies the
application template from the Qt for Android installation path into your
project's build directory, then it copies the contents of the path specified
by this variable on top of that, overwriting any existing files. For
instance, you can make a custom \c {AndroidManifest.xml} for your application,
then place this directly into the directory specified by this variable.
\target ANDROID_PERMISSIONS
\section1 ANDROID_PERMISSIONS
\note This variable applies only to Android modules.
Specifies a module's permissions list:
\badcode
ANDROID_PERMISSIONS += android.permission.ACCESS_FINE_LOCATION
\endcode
For more information, see \l{Android: <uses-permission>}{Android <uses-permission> Docs}.
\target ANDROID_TARGET_SDK_VERSION
\section1 ANDROID_TARGET_SDK_VERSION
\note This variable applies only to Android targets.
Specifies the target Android API level for the project. By default, this
variable is set to API level 28.
\target ANDROID_VERSION_CODE
\section1 ANDROID_VERSION_CODE
\note This variable applies only to Android targets.
Specifies the application's version number. For more information, see
\l{Android: App Versioning}{Android App Versioning}.
\target ANDROID_VERSION_NAME
\section1 ANDROID_VERSION_NAME
\note This variable applies only to Android targets.
Specifies the application's version in as a human readable string. For more
information, see \l{Android: App Versioning}{Android App Versioning}.
\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 compiler and linker 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. \note The use of this option is discouraged.
Specify dependencies as described in the \l{#SUBDIRS}{SUBDIRS}
variable documentation.
\row \li precompile_header \li Enables support for the use of
\l{Using Precompiled Headers}{precompiled headers} in projects.
\row \li precompile_header_c (MSVC only) \li Enables support for the use of
\l{Using Precompiled Headers}{precompiled headers} for C files.
\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 ltcg \li Link time code generation is enabled.
This option is off by default.
\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.
\row \li utf8_source \li Specifies that the project's source files use the
UTF-8 encoding. By default, the compiler default is used.
\row \li hide_symbols \li Set the default visibility of symbols in the binary
to hidden. By default, the compiler default is used.
\row \li c99 \li C99 support is enabled. This option has no effect if
the compiler does not support C99, or can't select the C standard.
By default, the compiler default is used.
\row \li c11 \li C11 support is enabled. This option has no effect if
the compiler does not support C11, or can't select the C standard.
By default, the compiler default is used.
\row \li strict_c \li Disables support for C compiler extensions.
By default, they are enabled.
\row \li c++11 \li C++11 support is enabled. This option has no effect if
the compiler does not support C++11, or can't select the C++ standard.
By default, support is enabled.
\row \li c++14 \li C++14 support is enabled. This option has no effect if
the compiler does not support C++14, or can't select the C++ standard.
By default, the compiler default is used.
\row \li c++1z \li C++17 support is enabled. This option has no effect if
the compiler does not support C++17, or can't select the C++ standard.
By default, support is disabled.
\row \li c++17 \li Same as c++1z.
\row \li c++2a \li C++2a support is enabled. This option has no effect if
the compiler does not support C++2a, or can't select the C++ standard.
By default, support is disabled.
\row \li c++latest \li Support for the latest C++ language standard is
enabled that is supported by the compiler. By default, this option is
disabled.
\row \li strict_c++ \li Disables support for C++ compiler extensions.
By default, they are enabled.
\row \li depend_includepath \li Appending the value of INCLUDEPATH to
DEPENDPATH is enabled. Set by default.
\row \li lrelease \li Run \c lrelease for all files listed in
\l TRANSLATIONS and \l EXTRA_TRANSLATIONS. If \c embed_translations
is not set, install the generated .qm files into
QM_FILES_INSTALL_PATH. Use QMAKE_LRELEASE_FLAGS to add options to
the lrelease call. Not set by default.
\row \li embed_translations \li Embed the generated translations from
\c lrelease in the executable, under \l{QM_FILES_RESOURCE_PREFIX}.
Requires \c lrelease to be set, too. Not set by default.
\row \li create_libtool \li Create a libtool .la file for the currently
built library.
\row \li create_pc \li Create a pkg-config .pc file for the currently built
library.
\row \li no_batch \li NMake only: Turn off generation of NMake batch rules
or inference rules.
\row \li skip_target_version_ext \li Suppress the automatic version number
appended to the DLL file name on Windows.
\row \li suppress_vcproj_warnings \li Suppress warnings of the VS project
generator.
\row \li windeployqt \li Automatically invoke windeployqt after linking,
and add the output as deployment items.
\row \li dont_recurse \li Suppress qmake recursion for the current
subproject.
\row \li no_include_pwd \li Do not add the current directory to
INCLUDEPATHS.
\endtable
When you use the \c debug_and_release option (which is the default under
Windows), the project will be processed three times: one time to produce
a "meta" Makefile, and two more times to produce a Makefile.Debug and a
Makefile.Release.
During the latter passes, \c build_pass and the respective \c debug or
\c release option is appended to \c CONFIG. This makes it possible to
perform build-specific tasks. For example:
\snippet code/doc_src_qmake-manual.pro 25
As an alternative to manually writing build type conditionals, some
variables offer build-specific variants, for example
\l{#QMAKE_LFLAGS_RELEASE}{QMAKE_LFLAGS_RELEASE} in addition to the general
\l{#QMAKE_LFLAGS}{QMAKE_LFLAGS}. These should be used when available.
The meta Makefile makes the sub-builds invokable via the \c debug and
\c release targets, and a combined build via the \c all target.
When the \c build_all \c CONFIG option is used, the combined build is
the default. Otherwise, the last specified \c CONFIG option from the set
(\c debug, \c release) determines the default. In this case, you can
explicitly invoke the \c all target to build both configurations at once:
\snippet code/doc_src_qmake-manual.pro 24
\note The details are slightly different when producing Visual Studio
and Xcode projects.
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).
\row \li no_install_prl \li This option disables the generation of
installation rules for generated .prl files.
\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.
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 x11 \li The target is an 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.
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. Consider using the option \c{cmdline} for
cross-platform applications.
\row \li cmdline \li The target is a cross-platform command line application.
On Windows, this implies \c{CONFIG += console}.
On macOS, this implies \c{CONFIG -= app_bundle}.
\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 metatypes \li Create a \c {<name>_metatypes.json} file for the
current project. \c {<name>} is the all lowercase base name of
\l TARGET.
\row \li qmltypes \li Automatically register QML types defined in C++.
For more information, see \l {Defining QML Types from C++}.
Also, create a \c {<template>.qmltypes} file for the current
project. \c <template> will be \c plugins (plural, for historical
reasons) if \c plugin is set, or the value of \l TEMPLATE otherwise.
\c qmltypes implies \c metatypes.
\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 EXE created
as part of an application project.
\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 \macos:
\table
\header \li Option \li Description
\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.
\row \li plugin_bundle \li Puts the plugin into a plugin bundle. This value
is not supported by the Xcode project generator.
\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:
\snippet 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 code/doc_src_qmake-manual.pro 27
\target DEFINES_DEBUG
\section1 DEFINES_DEBUG
Specifies preprocessor defines for the debug configuration. The values of
this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
This variable was introduced in Qt 5.13.2.
\target DEFINES_RELEASE
\section1 DEFINES_RELEASE
Specifies preprocessor defines for the release configuration. The values of
this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
\note For MSVC mkspecs, this variable contains the value \c NDEBUG by
default.
This variable was introduced in Qt 5.13.2.
\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 directories for qmake to scan, to resolve dependencies.
This variable is used when qmake crawls through the header files that you
\c{#include} in your source code.
\target DESTDIR
\section1 DESTDIR
Specifies where to put the \l{#TARGET}{target} file.
For example:
\snippet code/doc_src_qmake-manual.pro 30
\note The list of supported characters can depend on
the used build tool. In particular, parentheses do not
work with \c{make}.
\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 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 EXTRA_TRANSLATIONS
\section1 EXTRA_TRANSLATIONS
Specifies a list of translation (.ts) files that contain
translations of the user interface text into non-native languages.
In contrast to \l TRANSLATIONS, translation files in \c EXTRA_TRANSLATIONS
will be processed only by \l{Using lrelease}{lrelease}, not
\l{Using lupdate}{lupdate}.
You can use \l{CONFIG}{CONFIG += lrelease} to automatically compile the
files during the build, and
\l{CONFIG}{CONFIG += lrelease embed_translations} to make them available in
\l{The Qt Resource System}.
See the \l{Qt Linguist Manual} for more information about
internationalization (i18n) and localization (l10n) with Qt.
\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 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 code/doc_src_qmake-manual.pro 34
See also \l{#SOURCES}{SOURCES}.
\target ICON
\section1 ICON
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 IDLSOURCES
\section1 IDLSOURCES
This variable is used only on Windows for the Visual Studio project generation to
put the specified files in the Generated Files folder.
\target INCLUDEPATH
\section1 INCLUDEPATH
Specifies the #include directories which should be
searched when compiling the project.
For example:
\snippet code/doc_src_qmake-manual.pro 35
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
\snippet 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 code/doc_src_qmake-manual.pro 36
\c INSTALLS has a \c{.CONFIG} member that can take several values:
\table
\header
\li Value
\li Description
\row
\li no_check_exist
\li If not set, qmake looks to see if the files to install actually
exist. If these files don't exist, qmake doesn’t create the
install rule. Use this config value if you need to install
files that are generated as part of your build process, like
HTML files created by qdoc.
\row
\li nostrip
\li If set, the typical Unix strip functionality is turned off and
the debug information will remain in the binary.
\row
\li executable
\li On Unix, this sets the executable flag.
\row
\li no_build
\li When you do a \c{make install}, and you don't have a build of
the project yet, the project is first built, and then installed.
If you don't want this behavior, set this config value to ensure
that the build target is not added as a dependency to the install
target.
\row
\li no_default_install
\li A project has a top-level project target where, when you do a
\c{make install}, everything is installed. But, if you have an
install target with this config value set, it's not installed by
default. You then have to explicitly say \c{make install_<file>}.
\endtable
For more information, see \l{Installing Files}.
This variable is also used to specify which additional files will be
deployed to embedded devices.
\target JAVA_HOME
\section1 JAVA_HOME
\note This variable is useful only to Android targets.
Specifies the JDK/OpenJDK installation path used for building the project.
\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 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.
For example:
\snippet code/doc_src_qmake-manual.pro 38
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
\snippet 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 code/doc_src_qmake-manual.pro 39
\target LIBS_PRIVATE
\section1 LIBS_PRIVATE
Specifies a list of libraries to be linked privately into the project.
The behavior of this variable is identical to \l LIBS, except that
shared library projects built for Unix do not expose these dependencies
in their link interface.
The effect of this is that if project C depends on library B which
depends on library A privately, but C also wants to use symbols from A
directly, it needs to link to A explicitly. Put differently, libraries
linked privately are not exposed transitively at build time.
\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 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 MSVCPROJ_*
\section1 MSVCPROJ_*
These variables are handled internally by qmake and should not be modified
or utilized.
\target MOC_DIR
\section1 MOC_DIR
Specifies the directory where all intermediate moc
files should be placed.
For example:
\snippet code/doc_src_qmake-manual.pro 40
\target OBJECTIVE_HEADERS
\section1 OBJECTIVE_HEADERS
Defines the Objective-C++ 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.
This is similar to the HEADERS variable, but will let the generated moc
files be compiled with the Objective-C++ compiler.
See also \l{#OBJECTIVE_SOURCES}{OBJECTIVE_SOURCES}.
\target OBJECTIVE_SOURCES
\section1 OBJECTIVE_SOURCES
Specifies the names of all Objective-C/C++ source files in the project.
This variable is now obsolete, Objective-C/C++ files (.m and .mm) can be
added to the \l{#SOURCES}{SOURCES} variable.
See also \l{#OBJECTIVE_HEADERS}{OBJECTIVE_HEADERS}.
\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 code/doc_src_qmake-manual.pro 41
\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, Apple - 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 QM_FILES_RESOURCE_PREFIX
\section1 QM_FILES_RESOURCE_PREFIX
Specifies the directory in the resource system where \c .qm files will
be made available by \l{CONFIG}{CONFIG += embed_translations}.
The default is \c{:/i18n/}.
\target QM_FILES_INSTALL_PATH
\section1 QM_FILES_INSTALL_PATH
Specifies the target directory \c .qm files generated by
\l{CONFIG}{CONFIG += lrelease} will be installed to. Does not have any
effect if \l{CONFIG}{CONFIG += embed_translations} is set.
\target QML_IMPORT_PATH
\section1 QML_IMPORT_PATH
This variable is only used by \l{Qt Creator Manual}{Qt Creator}.
See \l{Qt Creator: Using QML Modules with Plugins} for details.
\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
\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 \macos, iOS, tvOS, and watchOS 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 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 \macos, iOS, tvOS, and watchOS 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 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.
\section1 QMAKE_CFLAGS
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_CFLAGS_DEBUG and
\c QMAKE_CFLAGS_RELEASE variables, respectively.
\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_RELEASE_WITH_DEBUGINFO
\section1 QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
Specifies the C compiler flags for release builds where
\c{force_debug_info} is set in \c{CONFIG}.
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
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_RELEASE_WITH_DEBUGINFO
\section1 QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
Specifies the C++ compiler flags for release builds where
\c{force_debug_info} is set in \c{CONFIG}.
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
\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_DEVELOPMENT_TEAM
\section1 QMAKE_DEVELOPMENT_TEAM
\note This variable is used on \macos, iOS, tvOS, and watchOS only.
The identifier of a development team to use for signing certificates
and provisioning profiles.
\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.
\target QMAKE_EXTENSION_STATICLIB
\section1 QMAKE_EXTENSION_STATICLIB
Contains the extension for shared static libraries. The value of
this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
\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
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 \macos, iOS, tvOS, and watchOS 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 \macos, iOS, tvOS, and watchOS only.
For projects where the build target is a \macos, iOS, tvOS, or watchOS
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_HOST
\section1 QMAKE_HOST
Provides information about the host machine running qmake.
For example, you can retrieve the host machine architecture from
\c{QMAKE_HOST.arch}.
\table
\header \li Keys \li Values
\row \li .arch \li Host architecture
\row \li .os \li Host OS
\row \li .cpu_count \li Number of available cpus
\row \li .name \li Host computer name
\row \li .version \li Host OS version number
\row \li .version_string \li Host OS version string
\endtable
\snippet code/doc_src_qmake-manual.pro 187
\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.
\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_ES2
This variable specifies the location of OpenGL header files to be added
to \l{INCLUDEPATH} when building a target with OpenGL ES 2 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.
\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 an 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 \macos, iOS, tvOS, and watchOS platforms only.
Specifies the name of the property list file, \c{.plist}, you
would like to include in your \macos, iOS, tvOS, and watchOS application bundle.
In the \c{.plist} file, you can define some variables which
qmake will replace with the relevant values:
\table
\header
\li Placeholder(s)
\li Effect
\row
\li \c ${PRODUCT_BUNDLE_IDENTIFIER}, \c @BUNDLEIDENTIFIER@
\li Expands to the target bundle's bundle identifier string,
for example: \c{com.example.myapp}. Determined by concatenating the
values of QMAKE_TARGET_BUNDLE_PREFIX and QMAKE_BUNDLE, separated
by a full stop (\c{.}).
\row
\li \c ${EXECUTABLE_NAME}, \c @EXECUTABLE@, \c @LIBRARY@
\li Equivalent to the value of QMAKE_APPLICATION_BUNDLE_NAME,
QMAKE_PLUGIN_BUNDLE_NAME, or QMAKE_FRAMEWORK_BUNDLE_NAME
(depending on the type of target being created),
or TARGET if none of the previous values are set.
\row
\li \c ${ASSETCATALOG_COMPILER_APPICON_NAME}, \c @ICON@
\li Expands to the value of ICON.
\row
\li \c ${QMAKE_PKGINFO_TYPEINFO}, \c @TYPEINFO@
\li Expands to the value of QMAKE_PKGINFO_TYPEINFO.
\row
\li \c ${QMAKE_FULL_VERSION}, \c @FULL_VERSION@
\li Expands to the value of VERSION expressed with three version components.
\row
\li \c ${QMAKE_SHORT_VERSION}, \c @SHORT_VERSION@
\li Expands to the value of VERSION expressed with two version components.
\row
\li \c ${MACOSX_DEPLOYMENT_TARGET}
\li Expands to the value of QMAKE_MACOSX_DEPLOYMENT_TARGET.
\row
\li \c ${IPHONEOS_DEPLOYMENT_TARGET}
\li Expands to the value of QMAKE_IPHONEOS_DEPLOYMENT_TARGET.
\row
\li \c ${TVOS_DEPLOYMENT_TARGET}
\li Expands to the value of QMAKE_TVOS_DEPLOYMENT_TARGET.
\row
\li \c ${WATCHOS_DEPLOYMENT_TARGET}
\li Expands to the value of QMAKE_WATCHOS_DEPLOYMENT_TARGET.
\endtable
\note When using the Xcode generator, the above \c{${var}}-style
placeholders are replaced directly by the Xcode build system and are not
handled by qmake. The \c{@var@} style placeholders work only with the qmake
Makefile generators and not with the Xcode generator.
If building for iOS, and the \c{.plist} file contains the key
\c NSPhotoLibraryUsageDescription, qmake will include an additional plugin
to the build that adds photo access support (to, e.g.,
\l{QFileDialog::setDirectory()}{QFile/QFileDialog}). See Info.plist
documentation from Apple for more information regarding this key.
\note Most of the time, the default \c{Info.plist} is good enough.
\section1 QMAKE_IOS_DEPLOYMENT_TARGET
\note This variable is used on the iOS platform only.
Specifies the hard minimum version of iOS that the application supports.
For more information, see \l {Expressing Supported iOS Versions}.
\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_REL_RPATH
Specifies the linker flags needed to enable relative paths in
\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_REL_RPATH_BASE
Specifies the string the dynamic linker understands to be the
location of the referring executable or library.
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_RELEASE_WITH_DEBUGINFO
Specifies the linker flags for release builds where \c{force_debug_info} is
set in \c{CONFIG}. 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
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 library search paths for all projects.
The value of this variable is typically handled by qmake
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
To specify additional search paths in project files,
use \l LIBS like that, instead:
\badcode
LIBS += -L/path/to/libraries
\endcode
\section1 QMAKE_LIBDIR_POST
Specifies a list of system library search paths for all projects.
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
Specifies additional libraries each project needs to link against.
The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
To specify libraries in a project file, use \l LIBS instead.
\section1 QMAKE_LIBS_PRIVATE
Specifies additional private libraries each project needs to
link against.
The value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
To specify private libraries in a library project file,
use \l LIBS_PRIVATE instead.
\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
Specifies the linker that will be used when building
application based projects. Only the file name of the linker
executable needs to be specified as long as it is on a path
contained in the \c PATH variable when the Makefile is processed.
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
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.
\target QMAKE_LRELEASE_FLAGS
\section1 QMAKE_LRELEASE_FLAGS
List of additional options passed to \l{Using lrelease}{lrelease} when
enabled through \l{CONFIG}{CONFIG += lrelease}.
\section1 QMAKE_OBJECTIVE_CFLAGS
Specifies the Objective C/C++ compiler flags for building
a project. These flags are used in addition to QMAKE_CFLAGS and
QMAKE_CXXFLAGS.
\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.
\target QMAKE_PROVISIONING_PROFILE
\section1 QMAKE_PROVISIONING_PROFILE
\note This variable is used on \macos, iOS, tvOS, and watchOS only.
The UUID of a valid provisioning profile. Use in conjunction with
\l{QMAKE_DEVELOPMENT_TEAM} to specify the provisioning profile.
\note Specifying the provisioning profile disables the automatically
managed signing.
\section1 QMAKE_MAC_SDK
This variable is used on \macos when building universal binaries.
\section1 QMAKE_MACOSX_DEPLOYMENT_TARGET
\note This variable is used on the \macos platform only.
Specifies the hard minimum version of \macos that the application supports.
For more information, see \l{macOS Version Dependencies}.
\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 absolute 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 code/doc_src_qmake-manual.pro 45
\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.
When relative paths are specified, qmake will mangle them into a form
understood by the dynamic linker to be relative to the location of
the referring executable or library.
This is supported only by some platforms (currently Linux and
Darwin-based ones) and is detectable by checking whether
\l{QMAKE_REL_RPATH_BASE} is set.
\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_SONAME_PREFIX
If defined, the value of this variable is used as a path to be prepended to
the built shared library's \c SONAME identifier. The \c SONAME is the
identifier that the dynamic linker will later use to reference the library.
In general, this reference may be a library name or full library path. On \macos,
iOS, tvOS, and watchOS, the path may be specified relatively using the following
placeholders:
\table
\header \li Placeholder \li Effect
\row \li @rpath
\li Expands to paths defined by LC_RPATH mach-o commands in
the current process executable or the referring libraries.
\row \li @executable_path
\li Expands to the current process executable location.
\row \li @loader_path
\li Expands to the referring executable or library location.
\endtable
In most cases, using \c @rpath is sufficient and recommended:
\snippet code/doc_src_qmake-manual.pro 183
However, the prefix may be also specified using different placeholders, or
an absolute path, such as one of the following:
\snippet code/doc_src_qmake-manual.pro 184
For more information, see
\l{https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html}{dyld}
documentation on dynamic library install names.
\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.
\target QMAKE_TARGET_COMPANY
\section1 QMAKE_TARGET_COMPANY
Windows only. Specifies the company for the project target; this is
used where applicable for putting the company name in the application's
properties. This is only utilized if the \l{VERSION} or \l{RC_ICONS}
variable is set and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
\target QMAKE_TARGET_DESCRIPTION
\section1 QMAKE_TARGET_DESCRIPTION
Windows only. Specifies the description for the project target; this is
used where applicable for putting the description in the application's
properties. This is only utilized if the \l{VERSION} or \l{RC_ICONS}
variable is set and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
\target QMAKE_TARGET_COPYRIGHT
\section1 QMAKE_TARGET_COPYRIGHT
Windows only. Specifies the copyright information for the project target;
this is used where applicable for putting the copyright information in the
application's properties. This is only utilized if the \l{VERSION} or
\l{RC_ICONS} variable is set and the \l{RC_FILE} and \l{RES_FILE} variables
are not set.
\target QMAKE_TARGET_PRODUCT
\section1 QMAKE_TARGET_PRODUCT
Windows only. Specifies the product for the project target; this is used
where applicable for putting the product in the application's properties.
This is only utilized if the \l{VERSION} or \l{RC_ICONS} variable is set
and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
\target QMAKE_MANIFEST
\section1 QMAKE_MANIFEST
Windows only. Specifies the manifest file for the project target.
This is only utilized if the \l{RC_FILE} and \l{RES_FILE} variables are not set.
Don't forget to remove embed_manifest_exe and embed_manifest_dll from
the CONFIG variable, otherwise it will conflict with the compiler generated one.
\section1 QMAKE_TVOS_DEPLOYMENT_TARGET
\note This variable is used on the tvOS platform only.
Specifies the hard minimum version of tvOS that the application supports.
For more information, see \l {Expressing Supported iOS Versions}.
\section1 QMAKE_UIC_FLAGS
This variable is used to customize the list of options passed to the
\l{uic}{User Interface Compiler} in each of the build rules where it is
used.
\section1 QMAKE_WATCHOS_DEPLOYMENT_TARGET
\note This variable is used on the watchOS platform only.
Specifies the hard minimum version of watchOS that the application supports.
For more information, see \l {Expressing Supported iOS Versions}.
\section1 QML_IMPORT_MAJOR_VERSION
Specifies the major version to be used for automatically generated QML type
registrations. For more information, see \l {Defining QML Types from C++}.
\section1 QML_IMPORT_MINOR_VERSION
When automatically registering QML types defined in C++, register an
additional version of the module using this minor version. Generally,
minor versions to be registered are inferred from the meta objects.
You can use this variable if the meta objects have not changed and you
still want to import a QML module with a newer minor version number. For
example, \c MyModule metaobjects are at \c 1.1 level, but you want to import
the module as \c 1.3.
\section1 QML_IMPORT_VERSION
Specifies \l QML_IMPORT_MAJOR_VERSION and \l QML_IMPORT_MINOR_VERSION as a
\c {<major>.<minor>} version string.
\section1 QML_IMPORT_NAME
Specifies the module name to be used for automatically generated QML type
registrations. For more information, see \l {Defining QML Types from C++}.
\section1 QML_FOREIGN_METATYPES
Specifies further JSON files with metatypes to be considered when generating
qmltypes files. Use this when external libraries provide types that are
exposed to QML, either directly or as base types or properties of other
types. Qt types will automatically be considered and don't have to be added
here.
\section1 QT
Specifies the \l{All Modules}{Qt modules} that are used by your project. For
the value to add for each module, see the module documentation.
At the C++ implementation level, using a Qt module makes its headers
available for inclusion and causes it to be linked to the binary.
By default, \c QT contains \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 code/doc_src_qmake-manual.pro 47
If your project is a \QD plugin, use the value \c uiplugin to specify that
the project is to be built as a library, but with specific plugin support
for \QD. For more information, see \l {Building and Installing the Plugin}.
\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.
qmake automatically adds the plugins that are typically needed
by the used Qt modules (see \c QT).
The defaults are tuned towards an optimal out-of-the-box experience.
See \l{Static Plugins} for a list of available plugins, and ways
to override the automatic linking.
This variable currently has no effect when linking against a
shared/dynamic build of Qt, or when linking libraries.
It may be used for deployment of dynamic plugins at a later time.
\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
Windows only. Specifies the name of the Windows resource file (.rc) for the
target. See \l{Adding Windows Resource Files}.
\target RC_CODEPAGE
\section1 RC_CODEPAGE
Windows only. Specifies the codepage that should be specified in a generated
.rc file. This is only utilized if the \l{VERSION} or \l{RC_ICONS} variable
is set and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
\target RC_DEFINES
\section1 RC_DEFINES
Windows only. qmake adds the values of this variable as RC preprocessor macros
(/d option). If this variable is not set, the \l{DEFINES} variable is used instead.
\snippet code/doc_src_qmake-manual.pro 186
\target RC_ICONS
\section1 RC_ICONS
Windows only. Specifies the icons that should be included into a generated
.rc file. This is only utilized if the \l{RC_FILE} and \l{RES_FILE} variable
are not set. More details about the generation of .rc files can be found in
the \l{Platform Notes}.
\target RC_LANG
\section1 RC_LANG
Windows only. Specifies the language that should be specified in a generated
.rc file. This is only utilized if the \l{VERSION} or \l{RC_ICONS} variable
is set and the \l{RC_FILE} and \l{RES_FILE} variables are not set.
\section1 RC_INCLUDEPATH
Specifies include paths that are passed to the Windows Resource Compiler.
\target RCC_DIR
\section1 RCC_DIR
Specifies the directory for Qt Resource Compiler output files.
For example:
\snippet 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
Windows only. Specifies the name of the Windows resource compiler's output
file for this target. See \l{RC_FILE} and \l{Adding Windows Resource Files}.
The value of this variable is typically handled by
qmake or \l{#QMAKESPEC}{qmake.conf} and rarely
needs to be modified.
\target SOURCES
\section1 SOURCES
Specifies the names of all source files in the project.
For example:
\snippet code/doc_src_qmake-manual.pro 49
See also \l{#HEADERS}{HEADERS}.
\target SUBDIRS
\section1 SUBDIRS
This variable, when used with the \c subdirs \l{#TEMPLATE}{template}
specifies the names of all subdirectories or project files that contain
parts of the project that need to be built. Each subdirectory specified
using this variable must contain its own project file.
It is recommended that the project file in each subdirectory has the same
base name as the subdirectory itself, because that makes it possible to omit
the file name. For example, if the subdirectory is called \c myapp, the
project file in that directory should be called \c myapp.pro.
Alternatively, you can specify a relative path to a .pro file in any
directory. It is strongly recommended that you specify only paths in the
current project's parent directory or its subdirectories.
For example:
\snippet code/doc_src_qmake-manual.pro 50
If you need to ensure that the subdirectories are built in a particular
order, use the \c .depends modifier on the relevant \c SUBDIRS elements.
For example:
\snippet code/doc_src_qmake-manual.pro 51
The configuration above ensures that \c{my_library} is built before
\c{my_executable} and that \c{my_executable} is built before \c{tests}.
However, \c{doc} can be built in parallel with the other subdirectories,
thus speeding up the build process.
\note Multiple dependencies can be listed and they will all be built before
the target that depends on them.
\note Using \l{#CONFIG}{CONFIG += ordered} is discouraged as it can slow down
multi-core builds. Unlike the example shown above, all builds will happen
sequentially even if they don't have dependencies.
Beside defining the build order, it is possible to modify the 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(s).
\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 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 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 a 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
\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 aux \li Creates a Makefile for not building anything. Use this if no compiler
needs to be invoked to create the target; for instance, because your
project is written in an interpreted language.
\note This template type is only available for Makefile-based
generators. In particular, it will not work with the vcxproj and
Xcode generators.
\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 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.
\target TRANSLATIONS
\section1 TRANSLATIONS
Specifies a list of translation (.ts) files that contain
translations of the user interface text into non-native languages.
Translation files in \c TRANSLATIONS will be processed by both
\l{Using lrelease}{lrelease} and \l{Using lupdate} tools. Use
\l EXTRA_TRANSLATIONS if you want only \c lrelease to process a file.
You can use \l{CONFIG}{CONFIG += lrelease} to automatically compile the
files during the build, and
\l{CONFIG}{CONFIG += lrelease embed_translations} to make them available in
\l{The Qt Resource System}.
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 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.
On Windows, triggers auto-generation of an .rc file if the \l{RC_FILE}
and \l{RES_FILE} variables are not set. The generated .rc file will have
the FILEVERSION and PRODUCTVERSION entries filled with major, minor, patch
level, and build number. Each number must be in the range from 0 to 65535.
More details about the generation of .rc files can be found in the
\l{Platform Notes}.
For example:
\snippet code/doc_src_qmake-manual.pro 57
\section1 VERSION_PE_HEADER
Windows only. Specifies the version number, that the Windows linker
puts into the header of the .exe or .dll file via the /VERSION option.
Only a major and minor version may be specified.
If VERSION_PE_HEADER is not set, it falls back to
the major and minor version from \l{VERSION} (if set).
\snippet code/doc_src_qmake-manual.pro 185
\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
through the entire VPATH list to see if it can find the file on its own.
See also \l{#DEPENDPATH}{DEPENDPATH}.
\target WINDOWS_TARGET_PLATFORM_VERSION
\section1 WINDOWS_TARGET_PLATFORM_VERSION
Specifies the targeted Windows version; this corresponds to the tag
\c{WindowsTargetPlatformVersion} in vcxproj files.
On desktop Windows, the default value is the value of the environment
variable \c{WindowsSDKVersion}.
On Universal Windows Platform (UWP), the default value is the value of the
environment variable \c{UCRTVERSION}.
\target WINDOWS_TARGET_PLATFORM_MIN_VERSION
\section1 WINDOWS_TARGET_PLATFORM_MIN_VERSION
Specifies the minimum version of the Windows target platform; this
corresponds to the tag \c{WindowsTargetPlatformMinVersion} in vcxproj files.
Defaults to \c{WINDOWS_TARGET_PLATFORM_VERSION}.
\target WINRT_MANIFEST
\section1 WINRT_MANIFEST
Specifies parameters to be passed to the application manifest on
\l{Qt for UWP}{UWP}. The allowed values are:
\table
\header
\li Member
\li Description
\row
\li architecture
\li The target architecture. Defaults to \c VCPROJ_ARCH.
\row
\li background
\li Tile background color. Defaults to \c{green}.
\row
\li capabilities
\li Specifies capabilities to add to the capability list.
\row
\li capabilities_device
\li Specifies device capabilities to add to the capability list
(location, webcam, and so on).
\row
\li CONFIG
\li Specifies additional flags for processing the input manifest file.
Currently, \c{verbatim} is the only available option.
\row
\li default_language
\li The default language code of the application. Defaults to "en".
\row
\li dependencies
\li Specifies dependencies required by the package.
\row
\li description
\li Package description. Defaults to \c{Default package description}.
\row
\li foreground
\li Tile foreground (text) color. Defaults to \c{light}.
\row
\li iconic_tile_icon
\li Image file for the \c{iconic} tile template icon. Default provided by
the mkspec.
\row
\li iconic_tile_small
\li Image file for the small \c{iconic} tile template logo. Default provided
by the mkspec.
\row
\li identity
\li The unique ID of the app. Defaults to reusing the existing generated
manifest's UUID, or generates a new UUID if none is present.
\row
\li logo_30x30
\li Logo image file of size 30x30 pixels.
\row
\li logo_41x41
\li Logo image file of size 41x41 pixels. This parameter is obsolete.
\row
\li logo_70x70
\li Logo image file of size 70x70 pixels.
\row
\li logo_71x71
\li Logo image file of size 71x71 pixels. This parameter is obsolete.
\row
\li logo_150x150
\li Logo image file of size 150x150 pixels. This is supported on all Windows
Store App platforms.
\row
\li logo_310x150
\li Logo image file of size 310x150 pixels. This is supported on all Windows
Store App platforms.
\row
\li logo_310x310
\li Logo image file of size 310x310 pixels. This is supported on all Windows
Store App platforms.
\row
\li logo_620x300
\li Splash screen image file of size 620x300 pixels.
\row
\li logo_480x800
\li Splash screen image file of size 480x800 pixels.
This parameter is obsolete.
\row
\li logo_large
\li Large logo image file. This has to be 150x150 pixels. Supported on all
Windows Store App platforms. Default provided by the mkspec.
\row
\li logo_medium
\li Medium logo image file. The image must have a pixel size of 70x70.
Default provided by the mkspec.
\row
\li logo_small
\li Small logo image file. The image must have a pixel size of 30x30.
Default provided by the mkspec.
\row
\li logo_splash
\li Splash screen image file. The image must have a pixel size of
620x300. Default provided by the mkspec.
\row
\li logo_store
\li Logo image file for Windows Store. Default provided by the mkspec.
\row
\li logo_wide
\li Wide logo image file. This has to be 310x150 pixels. Supported on all
Windows Store App platforms. Default provided by the mkspec.
\row
\li name
\li The name of the package as displayed to the user. Defaults to TARGET.
\row
\li phone_product_id
\li The GUID of the product.
This parameter is obsolete.
\row
\li phone_publisher_id
\li The GUID of the publisher.
This parameter is obsolete.
\row
\li publisher
\li Display name of the publisher. Defaults to \c{Default publisher display name}.
\row
\li publisher_id
\li The publisher's distinguished name (default: \c{CN=MyCN}).
\row
\li target
\li The name of the target (.exe). Defaults to TARGET.
\row
\li version
\li The version number of the package. Defaults to \c{1.0.0.0}.
\row
\li minVersion
\li The minimum required Windows version to run the package.
Defaults to \c{WINDOWS_TARGET_PLATFORM_VERSION}.
\row
\li maxVersionTested
\li The maximum Windows version the package has been tested against.
Defaults to \c{WINDOWS_TARGET_PLATFORM_MIN_VERSION}.
\endtable
You can use any combination of those values.
For example:
\code
WINRT_MANIFEST.publisher = MyCompany
WINRT_MANIFEST.logo_store = someImage.png
WINRT_MANIFEST.capabilities += internetClient
WINRT_MANIFEST.capabilities_device += location
\endcode
Additionally, an input manifest file can be specified by using WINRT_MANIFEST.
For example:
\code
WINRT_MANIFEST = someManifest.xml.in
\endcode
In case the input manifest file should not be processed and only copied to
the target directory, the verbatim configuration needs to be set.
\code
WINRT_MANIFEST = someManifest.xml.in
WINRT_MANIFEST.CONFIG += verbatim
\endcode
\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 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 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 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
\previouspage Variables
\nextpage Test Functions
\keyword qmake Function Reference - Replace 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. If it is a relative path, it is resolved relative to the current
directory before use.
For example, the following call returns the string
\c {"/home/johndoe/myproject/readme.txt"}:
\snippet code/doc_src_qmake-manual.pro 159
This function was introduced in Qt 5.0.
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 code/doc_src_qmake-manual.pro 59
\target qmake-cat
\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.
This function was introduced in Qt 5.0.
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 qmake/dirname.pro 0
\section2 enumerate_vars
Returns a list of all defined variable names.
This function was introduced in Qt 5.0.
\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 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 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 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 fn_first
\section2 first(variablename)
Returns the first value of \c variablename.
For example, the following call returns \c firstname:
\snippet code/doc_src_qmake-manual.pro 161
See also \l{take_first()}, \l{fn_last}{last()}.
\target format_number()
\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 code/doc_src_qmake-manual.pro 163
This function was introduced in Qt 5.0.
\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 getenv(variablename)
Returns the value of the environment variable \c variablename.
This is mostly equivalent to the \c $$(variablename) syntax.
The \c getenv function, however, supports environment variables with
parentheses in their name.
This function was introduced in Qt 5.12.
\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.
\target fn_last
\section2 last(variablename)
Returns the last value of \c variablename.
For example, the following call returns \c phone:
\snippet code/doc_src_qmake-manual.pro 162
See also \l{take_last()}, \l{fn_first}{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 code/doc_src_qmake-manual.pro 170
instead of:
\snippet code/doc_src_qmake-manual.pro 171
\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()}.
\target member()
\section2 member(variablename [, start [, end]])
Returns the slice of the list value of \c variablename with the
zero-based element indices between \c start and \c end (inclusive).
If \c start is not given, it defaults to zero. This usage is
equivalent to \c $$first(variablename).
If \c end is not given, it defaults to \c start. This usage represents
simple array indexing, as exactly one element will be returned.
It is also possible to specify start and end in a single argument, with
the numbers separated by two periods.
Negative numbers represent indices starting from the end of the list,
with -1 being the last element.
If either index is out of range, an empty list is returned.
If \c end is smaller than \c start, the elements are returned
in reverse order.
\note The fact that the end index is inclusive and unordered implies
that an empty list will be returned only when an index is invalid
(which is implied by the input variable being empty).
See also \l{str_member()}.
\target num_add()
\section2 num_add(arg1 [, arg2 ..., argn])
Takes an arbitrary number of numeric arguments and adds them up,
returning the sum.
Subtraction is implicitly supported due to the possibility to simply
prepend a minus sign to a numeric value to negate it:
\code
sum = $$num_add($$first, -$$second)
\endcode
If the operand may be already negative, another step is necessary to
normalize the number:
\code
second_neg = -$$second
second_neg ~= s/^--//
sum = $$num_add($$first, $$second_neg)
\endcode
This function was introduced in Qt 5.8.
\section2 prompt(question [, decorate])
Displays the specified \c question, and returns a value read from stdin.
If \c decorate is \e true (the default), the question gets a generic
prefix and suffix identifying it as a prompt.
\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 read_registry(tree, key[, flag])
Returns the value of registry key \c key inside the tree \c tree.
Only the trees \c HKEY_CURRENT_USER (\c HKCU) and \c HKEY_LOCAL_MACHINE
(\c HKLM) are supported.
The \c flag may be \c WOW64_32KEY (\c 32) or \c WOW64_64KEY (\c 64).
\note This function is available only on Windows hosts.
This function was introduced in Qt 5.12.1.
\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. If it is relative, it is resolved relative to the
current project directory before use.
If \c filePath is relative, it is first resolved against the base
directory; in that case, this function effectively acts as
$$clean_path().
This function was introduced in Qt 5.0.
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 qmake/replace.pro 0
prints the message:
\snippet code/doc_src_qmake-manual.pro 70
\section2 resolve_depends(variablename, prefix)
This is an internal function that you will typically not need.
This function was introduced in Qt 5.0.
\section2 reverse(variablename)
Returns the values of \c variablename in reverse order.
This function was introduced in Qt 5.0.
\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:
\snippet 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.
This function was introduced in Qt 5.0.
\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.
This function was introduced in Qt 5.0.
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.
This function was introduced in Qt 5.0.
See also \l{system_quote(arg)}{system_quote()}.
\target fn_size
\section2 size(variablename)
Returns the number of values of \c variablename.
See also \l{str_size()}.
\section2 sort_depends(variablename, prefix)
This is an internal function that you will typically not need.
This function was introduced in Qt 5.0.
\section2 sorted(variablename)
Returns the list of values in \c variablename with entries sorted
in ascending ASCII order.
Numerical sorting can be accomplished by zero-padding the values to
a fixed length with the help of the \l{format_number()} function.
This function was introduced in Qt 5.8.
\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 code/doc_src_qmake-manual.pro 168
\section2 sprintf(string, arguments...)
Replaces %1-%9 in \c string with the arguments passed in the comma-separated
list of function \c arguments and returns the processed string.
\target str_member()
\section2 str_member(arg [, start [, end]])
This function is identical to \l{member()}, except that it operates
on a string value instead of a list variable, and consequently the
indices refer to character positions.
This function can be used to implement many common string slicing
operations:
\code
# $$left(VAR, len)
left = $$str_member(VAR, 0, $$num_add($$len, -1))
# $$right(VAR, len)
right = $$str_member(VAR, -$$num, -1)
# $$mid(VAR, off, len)
mid = $$str_member(VAR, $$off, $$num_add($$off, $$len, -1))
# $$mid(VAR, off)
mid = $$str_member(VAR, $$off, -1)
# $$reverse(VAR)
reverse = $$str_member(VAR, -1, 0)
\endcode
\note In these implementations, a zero \c len argument needs to be
handled separately.
See also \l{member()}, \l{num_add()}.
This function was introduced in Qt 5.8.
\target str_size()
\section2 str_size(arg)
Returns the number of characters in the argument.
See also \l{fn_size}{size()}.
This function was introduced in Qt 5.8.
\target system_replace
\section2 system(command[, mode[, stsvar]])
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 code/doc_src_qmake-manual.pro 72
Like \l {qmake-cat}{$$cat()}, the \a mode argument takes \c blob, \c lines,
\c true, and \c false as value. However, the legacy word splitting rules
(i.e. empty or \c true, and \c false) differ subtly.
If you pass \c stsvar, the command's exit status will be stored in that
variable. If the command crashes, the status will be -1, otherwise a
non-negative exit code of the command's choosing. Usually, comparing
the status with zero (success) is sufficient.
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.
This function was introduced in Qt 5.0.
See also \l{shell_path(path)}{shell_path()}.
\section2 system_quote(arg)
Quotes \c arg for the shell that is used by the \c{system()}
functions.
This function was introduced in Qt 5.0.
See also \l{shell_quote(arg)}{shell_quote()}.
\target take_first()
\section2 take_first(variablename)
Returns the first value of \c variablename and removes it from the
source variable.
This provides convenience for implementing queues, for example.
This function was introduced in Qt 5.8.
See also \l{take_last()}, \l{fn_first}{first()}.
\target take_last()
\section2 take_last(variablename)
Returns the last value of \c variablename and removes it from the
source variable.
This provides convenience for implementing stacks, for example.
This function was introduced in Qt 5.8.
See also \l{take_first()}, \l{fn_last}{last()}.
\target unique
\section2 unique(variablename)
Returns the list of values in \c variablename with duplicate entries removed.
For example:
\snippet 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.
This function was introduced in Qt 5.0.
*/
/*!
\page qmake-test-function-reference.html
\title Test Functions
\previouspage Replace Functions
\keyword qmake Function Reference - Test 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|stash], [source variablename])
This is an internal function that you will typically not need.
This function was introduced in Qt 5.0.
\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 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. It is possible to specify a regular expression for
parameter \e value.
You can check the return value of this function using a scope.
For example:
\snippet 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.
\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 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 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 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 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 code/doc_src_qmake-manual.pro 63
\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.
\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 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 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 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 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 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.
\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 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 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.
This function was introduced in Qt 5.0.
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 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 code/doc_src_qmake-manual.pro 69
\section2 mkpath(dirPath)
Creates the directory path \c dirPath. This function is a wrapper around the
QDir::mkpath function.
This function was introduced in Qt 5.0.
\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.
\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 code/doc_src_qmake-manual.pro 71
See also the replace variant of \l{system_replace}{system()}.
\target touchfunction
\section2 touch(filename, reference_filename)
Updates the time stamp of \c filename to match the time stamp of
\c reference_filename.
This function was introduced in Qt 5.0.
\section2 unset(variablename)
Removes \c variablename from the current context.
For example:
\snippet code/doc_src_qmake-manual.pro 169
\section2 versionAtLeast(variablename, versionNumber)
Tests that the version number from \c variablename is greater than or equal
to \c versionNumber. The version number is considered to be a sequence of
non-negative decimal numbers delimited by '.'; any non-numerical tail of
the string will be ignored. Comparison is performed segment-wise from left
to right; if one version is a prefix of the other, it is considered smaller.
This function was introduced in Qt 5.10.
\section2 versionAtMost(variablename, versionNumber)
Tests that the version number from \c variablename is less than or equal to
\c versionNumber. Works as
\l{versionAtLeast(variablename, versionNumber)}{versionAtLeast()}.
This function was introduced in Qt 5.10.
\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.
This function was introduced in Qt 5.0.
\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 code/doc_src_qmake-manual.pro 157
And then, in the code:
\snippet code/doc_src_qmake-manual.pro 158
\section2 prepareRecursiveTarget(target)
Facilitates the creation of project-wide targets similar to the \c install
target by preparing a target that iterates through all subdirectories. For
example:
\snippet code/doc_src_qmake-manual.pro 174
Subdirs that have \c have_no_default or \c no_<target>_target specified in
their .CONFIG are excluded from this target:
\snippet code/doc_src_qmake-manual.pro 175
You must add the prepared target manually to \l{QMAKE_EXTRA_TARGETS}:
\snippet code/doc_src_qmake-manual.pro 176
To make the target global, the code above needs to be included into every
subdirs subproject. In addition, to make these targets do anything,
non-subdirs subprojects need to include respective code. The easiest way to
achieve this is creating a custom feature file. For example:
\snippet code/doc_src_qmake-manual.pro 177
The feature file needs to be injected into each subproject, for example by
.qmake.conf:
\snippet code/doc_src_qmake-manual.pro 178
This function was introduced in Qt 5.0.
\section2 qtCompileTest(test)
Builds a test project. If the test passes, true is returned and
\c {config_<test>} is added to the \l{CONFIG} variable. Otherwise, false is
returned.
To make this function available, you need to load the respective feature
file:
\snippet code/doc_src_qmake-manual.pro 179
This also sets the variable QMAKE_CONFIG_TESTS_DIR to the
\c config.tests subdirectory of the project's parent directory.
It is possible to override this value after loading the feature file.
Inside the tests directory, there has to be one subdirectory per test that
contains a simple qmake project. The following code snippet illustrates the
.pro file of the project:
\snippet code/doc_src_qmake-manual.pro 180
The following code snippet illustrates the main .cpp file of the project:
\snippet code/doc_src_qmake-manual.pro 181
The following code snippet shows the invocation of the test:
\snippet code/doc_src_qmake-manual.pro 182
If the test project is built successfully, the test passes.
The test results are automatically cached, which also makes them
available to all subprojects. It is therefore recommended to run
all configuration tests in the top-level project file.
To suppress the re-use of cached results, pass \c{CONFIG+=recheck}
to qmake.
See also \l{load(feature)}{load()}.
This function was introduced in Qt 5.0.
\section2 qtHaveModule(name)
Checks whether the Qt module specified by \c name is present.
For a list of possible values, see \l{Variables#QT}{QT}.
This function was introduced in Qt 5.0.1.
*/
/*!
\page qmake-environment-reference.html
\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 code/doc_src_qmake-manual.pro 74
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 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 code/doc_src_qmake-manual.pro 77
You can query the values of properties in a project file as follows:
\snippet 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.
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 be automatically added to the generated
Makefile after the contents of 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 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
\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 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 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 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 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 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
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 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 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 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 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 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 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:
\snippet 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 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 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 qmake/scopes.pro 3
You may also use the \c : operator to perform single line conditional
assignments. For example:
\snippet 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 qmake/scopes.pro 4
If you need to mix both operators, you can use the \c if function to specify
operator precedence.
\snippet qmake/scopes.pro 5
The condition accepts the wildcard character to match a family of \c{CONFIG}
values or mkspec names.
\snippet qmake/scopes.pro 6
\note Historically, checking the mkspec name with wildcards like above was
qmake's way to check for the platform. Nowadays, we recommend to use values
that are defined by the mkspec in the \c QMAKE_PLATFORM variable.
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 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 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 qmake/configscopes.pro 1
\snippet qmake/configscopes.pro 2
\snippet 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
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 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 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 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 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 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 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
as follows:
\snippet 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 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 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 qmake/testfunction.pro 0
*/
/*!
\page qmake-advanced-usage.html
\title Advanced Usage
\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 list of directories delimited by the platform's path list separator
(colon for Unix, semicolon for Windows).
\li In a directory listed in the \c QMAKEFEATURES property variable that
contains a list of directories delimited by the platform's path list separator.
\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
list of directories delimited by the platform's path list separator.
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.
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 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). The project root
is determined by the top-level \c{.pro} file. However, if you place the
\c{.qmake.cache} file in a sub-directory or the directory of a
sub-project, then the project root becomes the sub-directory itself.
\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 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 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 code/doc_src_qmake-manual.pro 81
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 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 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
\c touch command. 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 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
\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 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.
\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 dep_existing_only
\li Every dependency that is a result of .depend_command is checked for
existence. Non-existing dependencies are ignored.
This value was introduced in Qt 5.13.2.
\row
\li dep_lines
\li The output from the .depend_command is interpreted to be one file
per line. The default is to split on whitespace and is maintained
only for backwards compatibility reasons.
\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 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 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
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
\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 \macos, iOS, tvOS, and watchOS
\list
\li Makefile
\li Xcode
\endlist
\li Unix
\list
\li GCC 3.4 and above
\li clang
\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 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 code/doc_src_qmake-manual.pro 105
qmake will handle the rest, to ensure the
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.
The MSVC and g++ specs targeting Windows enable \c precompile_header
by default.
Using this option, you may trigger
conditional blocks in your project file to add settings when using
precompiled headers.
For example:
\snippet code/doc_src_qmake-manual.pro 106
To use the precompiled header also for C files on MSVC nmake target, add
\c precompile_header_c to the \l{CONFIG} variable. If the header is
used also for C++ and it contains C++ keywords/includes, enclose them
with \c{#ifdef __cplusplus}).
\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 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 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>
#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 += cmdline precompile_header
# Use Precompiled headers (PCH)
PRECOMPILED_HEADER = stable.h
HEADERS = stable.h \
mydialog.h \
myobject.h
SOURCES = main.cpp \
mydialog.cpp \
myobject.cpp \
util.cpp
FORMS = mydialog.ui
\endcode
\omit
\snippet examples/qmake/precompile/precompile.pro 0
\endomit
*/
/*!
\keyword qmake-getting-started
\page qmake-tutorial.html
\title Getting Started
\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 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 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 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 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
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 code/doc_src_qmake-manual.pro 112
The finished project file should look like this:
\snippet 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 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 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 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 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 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()}
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 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 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 code/doc_src_qmake-manual.pro 121
Nested scopes can be joined together using colons, so the final
project file looks like this:
\snippet 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
\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{Qt for Windows - Deployment} and \l{Qt for macOS}.
\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
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. For additional
platform-dependent system variables, you could have a look at the
\l{Platform Notes}.
\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.
\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 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
\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
Test cases will often be written with \l{QTest} or \c{TestCase}, but
it 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, \macos, and iOS, 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
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, only the option that is specified last is applied.
\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 qmake/debug_and_release.pro 0
\snippet 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 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 qmake/debug_and_release.pro 2
This allows the Makefile to be processed using the default rule:
\snippet 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 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
Note: This was originally used in the customwidgetplugin.pro file, but is
no longer needed there.
\endomit
\snippet 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.
*/