From 1c05791bd1e89bd7551d77e80db7fa4750f2631f Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 13 Jun 2013 20:42:07 +0200 Subject: [PATCH] move qmake docs into qtbase as of qttools/18a5e89623815f5355b4173a2e93609eb10289d1 Change-Id: I75cb55e0c404449a4e0d963e09185287a3f6343e Reviewed-by: Martin Smith Reviewed-by: Leena Miettinen --- qmake/doc/qmake.qdocconf | 26 + qmake/doc/src/images/qmake-precompile-ui.png | Bin 0 -> 89070 bytes qmake/doc/src/qmake-manual.qdoc | 4491 +++++++++++++++++ .../snippets/code/doc_src_qmake-manual.cpp | 58 + .../snippets/code/doc_src_qmake-manual.pro | 917 ++++ qmake/doc/src/snippets/qmake/comments.pro | 10 + qmake/doc/src/snippets/qmake/configscopes.pro | 23 + .../src/snippets/qmake/debug_and_release.pro | 14 + qmake/doc/src/snippets/qmake/delegate.h | 40 + .../doc/src/snippets/qmake/dereferencing.pro | 5 + qmake/doc/src/snippets/qmake/destdir.pro | 2 + qmake/doc/src/snippets/qmake/dirname.pro | 6 + qmake/doc/src/snippets/qmake/environment.pro | 9 + qmake/doc/src/snippets/qmake/functions.pro | 34 + qmake/doc/src/snippets/qmake/include.pro | 3 + qmake/doc/src/snippets/qmake/main.cpp | 40 + qmake/doc/src/snippets/qmake/model.cpp | 40 + qmake/doc/src/snippets/qmake/model.h | 40 + qmake/doc/src/snippets/qmake/other.pro | 0 .../src/snippets/qmake/paintwidget_mac.cpp | 40 + .../src/snippets/qmake/paintwidget_unix.cpp | 44 + .../src/snippets/qmake/paintwidget_win.cpp | 40 + .../src/snippets/qmake/precompile-stable.h | 52 + .../src/snippets/qmake/project_location.pro | 6 + .../src/snippets/qmake/qtconfiguration.pro | 18 + qmake/doc/src/snippets/qmake/quoting.pro | 8 + qmake/doc/src/snippets/qmake/replace.pro | 4 + .../src/snippets/qmake/replacefunction.pro | 46 + qmake/doc/src/snippets/qmake/scopes.pro | 42 + .../src/snippets/qmake/shared_or_static.pro | 8 + qmake/doc/src/snippets/qmake/spaces.pro | 9 + .../doc/src/snippets/qmake/specifications.pro | 7 + qmake/doc/src/snippets/qmake/testfunction.pro | 20 + qmake/doc/src/snippets/qmake/variables.pro | 7 + qmake/doc/src/snippets/qmake/view.h | 40 + qmake/qmake-docs.pro | 2 + qtbase.pro | 2 + 37 files changed, 6153 insertions(+) create mode 100644 qmake/doc/qmake.qdocconf create mode 100644 qmake/doc/src/images/qmake-precompile-ui.png create mode 100644 qmake/doc/src/qmake-manual.qdoc create mode 100644 qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp create mode 100644 qmake/doc/src/snippets/code/doc_src_qmake-manual.pro create mode 100644 qmake/doc/src/snippets/qmake/comments.pro create mode 100644 qmake/doc/src/snippets/qmake/configscopes.pro create mode 100644 qmake/doc/src/snippets/qmake/debug_and_release.pro create mode 100644 qmake/doc/src/snippets/qmake/delegate.h create mode 100644 qmake/doc/src/snippets/qmake/dereferencing.pro create mode 100644 qmake/doc/src/snippets/qmake/destdir.pro create mode 100644 qmake/doc/src/snippets/qmake/dirname.pro create mode 100644 qmake/doc/src/snippets/qmake/environment.pro create mode 100644 qmake/doc/src/snippets/qmake/functions.pro create mode 100644 qmake/doc/src/snippets/qmake/include.pro create mode 100644 qmake/doc/src/snippets/qmake/main.cpp create mode 100644 qmake/doc/src/snippets/qmake/model.cpp create mode 100644 qmake/doc/src/snippets/qmake/model.h create mode 100644 qmake/doc/src/snippets/qmake/other.pro create mode 100644 qmake/doc/src/snippets/qmake/paintwidget_mac.cpp create mode 100644 qmake/doc/src/snippets/qmake/paintwidget_unix.cpp create mode 100644 qmake/doc/src/snippets/qmake/paintwidget_win.cpp create mode 100644 qmake/doc/src/snippets/qmake/precompile-stable.h create mode 100644 qmake/doc/src/snippets/qmake/project_location.pro create mode 100644 qmake/doc/src/snippets/qmake/qtconfiguration.pro create mode 100644 qmake/doc/src/snippets/qmake/quoting.pro create mode 100644 qmake/doc/src/snippets/qmake/replace.pro create mode 100644 qmake/doc/src/snippets/qmake/replacefunction.pro create mode 100644 qmake/doc/src/snippets/qmake/scopes.pro create mode 100644 qmake/doc/src/snippets/qmake/shared_or_static.pro create mode 100644 qmake/doc/src/snippets/qmake/spaces.pro create mode 100644 qmake/doc/src/snippets/qmake/specifications.pro create mode 100644 qmake/doc/src/snippets/qmake/testfunction.pro create mode 100644 qmake/doc/src/snippets/qmake/variables.pro create mode 100644 qmake/doc/src/snippets/qmake/view.h create mode 100644 qmake/qmake-docs.pro diff --git a/qmake/doc/qmake.qdocconf b/qmake/doc/qmake.qdocconf new file mode 100644 index 00000000000..67e6e956500 --- /dev/null +++ b/qmake/doc/qmake.qdocconf @@ -0,0 +1,26 @@ +include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) + +project = QMake +description = QMake Manual +url = http://qt-project.org/doc/qt-$QT_VER/qmake + +qhp.projects = qmake + +qhp.qmake.file = qmake.qhp +qhp.qmake.namespace = org.qt-project.qmake.$QT_VERSION_TAG +qhp.qmake.virtualFolder = qmake +qhp.qmake.indexTitle = QMake Manual +qhp.qmake.filterAttributes = qt $QT_VERSION tools qmake +qhp.qmake.customFilters.qmake.name = qmake Manual +qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake +qhp.qmake.subprojects = manual +qhp.qmake.subprojects.manual.title = Manual +qhp.qmake.subprojects.manual.indexTitle = qmake Manual +qhp.qmake.subprojects.manual.selectors = fake:page + +language = Cpp + +sources = src/qmake-manual.qdoc + +imagedirs = src/images +exampledirs = src diff --git a/qmake/doc/src/images/qmake-precompile-ui.png b/qmake/doc/src/images/qmake-precompile-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7b936feee1ed429141d38b3a64f0d7315a5fd8 GIT binary patch literal 89070 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 z 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.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 snippets/code/doc_src_qmake-manual.pro 77 + + You can query the values of properties in a project file as follows: + + \snippet snippets/code/doc_src_qmake-manual.pro 78 + + \target QMAKESPEC + \section1 QMAKESPEC + + qmake requires a platform and compiler + description file which contains many default values used to generate + appropriate Makefiles. The standard Qt distribution comes with many of + these files, located in the \c mkspecs subdirectory of the Qt installation. + + The \c QMAKESPEC environment variable can contain any of the following: + + \list + \li A complete path to a directory containing a \c{qmake.conf} file. + In this case qmake will open the + \c{qmake.conf} file from within that directory. If the file does not + exist, qmake will exit with an error. + \li The name of a platform-compiler combination. In this case, + qmake will search in the directory specified + by the \c mkspecs subdirectory of the data path specified when Qt was + compiled (see QLibraryInfo::DataPath). + \endlist + + \note The \c QMAKESPEC path will automatically be added to the + \l{INCLUDEPATH} system variable. + + \target cache + \section1 Cache File + + The cache file is a special file qmake reads to + find settings not specified in the \c qmake.conf file, project files, or + at the command line. When qmake is run, it looks for a file called + \c{.qmake.cache} in parent directories of the current directory, unless you + specify \c -nocache. If qmake + fails to find this file, it will silently ignore this step of processing. + + If qmake finds a \c{.qmake.cache} file then it will process this file first before + it processes the project file. + + \target Extensions + \section1 File Extensions + + Under normal circumstances qmake will try to + use appropriate file extensions for your platform. However, it is + sometimes necessary to override the default choices for each platform and + explicitly define file extensions for qmake to + use. This is achieved by redefining certain built-in variables. For + example, the extension used for \l moc files can be redefined with the + following assignment in a project file: + + \snippet snippets/code/doc_src_qmake-manual.pro 85 + + The following variables can be used to redefine common file extensions recognized + by qmake: + + \list + \li \l{QMAKE_EXT_MOC} modifies the extension placed on included moc files. + \li \l{QMAKE_EXT_UI} modifies the extension used for \QD UI files + (usually in \l{FORMS}). + \li \l{QMAKE_EXT_PRL} modifies the extension placed on + \l{#LibDepend}{library dependency files}. + \li \l{QMAKE_EXT_LEX} changes the suffix used in Lex files (usually in + \l{LEXSOURCES}). + \li \l{QMAKE_EXT_YACC} changes the suffix used in Yacc files (usually in + \l{YACCSOURCES}). + \li \l{QMAKE_EXT_OBJ} changes the suffix used on generated object files. + \endlist + + All of the above accept just the first value, so you must assign to it just one + value that will be used throughout your project file. There are two variables that + accept a list of values: + + \list + \li \l{QMAKE_EXT_CPP} causes qmake to interpret + all files with these suffixes as C++ source files. + \li \l{QMAKE_EXT_H} causes qmake to interpret + all files with these suffixes as C and C++ header files. + \endlist +*/ + +/*! + \page qmake-language.html + \title qmake Language + \contentspage {qmake Manual}{Contents} + \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 snippets/code/doc_src_qmake-manual.pro 89 + + The above line sets the \l{TARGET} variable to \c myapp. This will overwrite any + values previously set for \c TARGET with \c myapp. + + \section2 Appending Values + + The \c += operator appends a new value to the list of values in a variable: + + \snippet snippets/code/doc_src_qmake-manual.pro 90 + + The above line appends \c USE_MY_STUFF to the list of pre-processor defines to be put + in the generated Makefile. + + \section2 Removing Values + + The \c -= operator removes a value from the list of values in a variable: + + \snippet snippets/code/doc_src_qmake-manual.pro 91 + + The above line removes \c USE_MY_STUFF from the list of pre-processor defines to be + put in the generated Makefile. + + \section2 Adding Unique Values + + The \c *= operator adds a value to the list of values in a variable, but only + if it is not already present. This prevents values from being included many + times in a variable. For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 92 + + In the above line, \c USE_MY_STUFF will only be added to the list of pre-processor + defines if it is not already defined. Note that the \l{unique}{unique()} + function can also be used to ensure that a variable only contains one + instance of each value. + + \section2 Replacing Values + + The \c ~= operator replaces any values that match a regular expression with + the specified value: + + \snippet snippets/code/doc_src_qmake-manual.pro 93 + + In the above line, any values in the list that start with \c QT_D or \c QT_T are + 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 snippets/code/doc_src_qmake-manual.pro 94 + + Variables can be used to store the contents of environment variables. + These can be evaluated at the time when qmake + is run, or included in the generated Makefile for evaluation when the + project is built. + + To obtain the contents of an environment value when + qmake is run, use the \c $$(...) operator: + + \snippet snippets/qmake/environment.pro 0 + + In the above assignment, the value of the \c PWD environment variable + is read when the project file is processed. + + To obtain the contents of an environment value at the time when the + generated Makefile is processed, use the \c $(...) operator: + + \snippet snippets/qmake/environment.pro 1 + + In the above assignment, the value of \c PWD is read immediately + when the project file is processed, but \c $(PWD) is assigned to + \c DESTDIR in the generated Makefile. This makes the build process + more flexible as long as the environment variable is set correctly + when the Makefile is processed. + + \section2 Accessing qmake Properties + + The special \c $$[...] operator can be used to access qmake properties: + + \snippet snippets/qmake/qtconfiguration.pro 0 + + For more information, see \l{Configuring qmake}. + + The properties accessible with this operator are typically used to + enable third party plugins and components to be integrated in Qt. + For example, a \QD plugin can be installed alongside \QD's built-in + plugins if the following declaration is made in its project file: + + \snippet snippets/code/doc_src_qmake-manual.pro 101 + + \target Scopes + \section1 Scopes + + Scopes are similar to \c if statements in procedural programming languages. + If a certain condition is true, the declarations inside the scope are processed. + + \section2 Scope Syntax + + Scopes consist of a condition followed by an opening brace on the same line, + a sequence of commands and definitions, and a closing brace on a new line: + + \snippet snippets/qmake/scopes.pro syntax + + The opening brace \e{must be written on the same line as the condition}. + Scopes may be concatenated to include more than one condition, as described + in the following sections. + + \section2 Scopes and Conditions + + A scope is written as a condition followed by a series of declarations + contained within a pair of braces. For example: + + \snippet snippets/qmake/scopes.pro 0 + + The above code will add the \c paintwidget_win.cpp file to the sources listed + in the generated Makefile when building for a Windows platform. When + building for other platforms, the define will be ignored. + + The conditions used in a given scope can also be negated to provide an + alternative set of declarations that will be processed only if the + original condition is false. For example, to process something when building + for all platforms \e except Windows, negate the scope like this: + + \snippet snippets/qmake/scopes.pro 1 + + Scopes can be nested to combine more than one condition. For instance, to + include a particular file for a certain platform only if + debugging is enabled, write the following: + + \snippet snippets/qmake/scopes.pro 2 + + To save writing many nested scopes, you can nest scopes using the \c : + operator. The nested scopes in the above example can be rewritten in + the following way: + + \snippet snippets/qmake/scopes.pro 3 + + You may also use the \c : operator to perform single line conditional + assignments. For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 95 + + The above line adds \c USE_MY_STUFF to the \l{DEFINES} variable only when + building for the Windows platform. + Generally, the \c : operator behaves like a logical AND operator, joining + together a number of conditions, and requiring all of them to be true. + + There is also the \c | operator to act like a logical OR operator, joining + together a number of conditions, and requiring only one of them to be true. + + \snippet snippets/qmake/scopes.pro 4 + + You can also provide alternative declarations to those within a scope by + using an \c else scope. Each \c else scope is processed if the conditions + for the preceding scopes are false. + This allows you to write complex tests when combined with other scopes + (separated by the \c : operator as above). For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 96 + + \section2 Configuration and Scopes + + The values stored in the \l{CONFIG} variable are + treated specially by qmake. Each of the possible + values can be used as the condition for a scope. For example, the list of + values held by \c CONFIG can be extended with the \c opengl value: + + \snippet snippets/qmake/configscopes.pro 0 + + As a result of this operation, any scopes that test for \c opengl will + be processed. We can use this feature to give the final executable an + appropriate name: + + \snippet snippets/qmake/configscopes.pro 1 + \snippet snippets/qmake/configscopes.pro 2 + \snippet snippets/qmake/configscopes.pro 3 + + This feature makes it easy to change the configuration for a project + without losing all the custom settings that might be needed for a specific + configuration. In the above code, the declarations in the first scope are + processed, and the final executable will be called \c application-gl. + However, if \c opengl is not specified, the declarations in the second + 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 snippets/qmake/specifications.pro 0 + + You can test for any other platform-compiler combination as long as a + specification exists for it in the \c mkspecs directory. + + \target UsingVariables + \section1 Variables + + Many of the variables used in project files are special variables that + qmake uses when generating Makefiles, such as \l{DEFINES}, \l{SOURCES}, and + \l{HEADERS}. In addition, you can create variables for your own use. qmake + creates new + variables with a given name when it encounters an assignment to that name. + For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 97 + + There are no restricitions on what you do to your own variables, as + qmake will ignore them unless it needs to evaluate them when processing + a scope. + + You can also assign the value of a current variable to another + variable by prefixing $$ to the variable name. For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 98 + + Now the MY_DEFINES variable contains what is in the DEFINES variable at + this point in the project file. This is also equivalent to: + + \snippet snippets/code/doc_src_qmake-manual.pro 99 + + The second notation allows you to append the contents of the variable to + another value without separating the two with a space. For example, the + following will ensure that the final executable will be given a name + that includes the project template being used: + + \snippet snippets/code/doc_src_qmake-manual.pro 100 + + \target UsingReplaceFunctions + \section1 Replace Functions + + qmake provides a selection of built-in + functions to allow the contents of variables to be processed. These + functions process the arguments supplied to them and return a value, or + list of values, as a result. To assign a result to a variable, use the \c $$ + operator with this type of function as you would to assign contents of one + variable to another: + + \snippet snippets/qmake/functions.pro 1 + + This type of function should be used on the right-hand side of + assignments (that is, as an operand). + + You can define your own functions for processing the contents of variables + as follows: + + \snippet snippets/code/doc_src_qmake-manual.pro 102 + + The following example function takes a variable name as its only + argument, extracts a list of values from the variable with the + \l{eval(string)}{eval()} built-in function, and compiles a list of files: + + \snippet snippets/qmake/replacefunction.pro 0 + + \target UsingTestFunctions + \section1 Test Functions + + qmake provides built-in functions that can be + used as conditions when writing scopes. These functions do not return a + value, but instead indicate \e success or \e failure: + + \snippet snippets/qmake/functions.pro 3 + + This type of function should be used in conditional expressions + only. + + It is possible to define your own functions to provide conditions + for scopes. The following example tests whether each file in a list + exists and returns true if they all exist, or false if not: + + \snippet snippets/qmake/testfunction.pro 0 +*/ + +/*! + \page qmake-advanced-usage.html + \title Advanced Usage + \contentspage {qmake Manual}{Contents} + \previouspage qmake Language + \nextpage Using Precompiled Headers + + \section1 Adding New Configuration Features + + qmake lets you create your own \c features that + can be included in project files by adding their names to the list of + values specified by the \l{CONFIG} variable. Features are collections of + custom functions and definitions in \c{.prf} files that can reside in one + of many standard directories. The locations of these directories are + defined in a number of places, and qmake checks + each of them in the following order when it looks for \c{.prf} files: + + \omit + TODO: Fix the list, as it is incomplete and partly incorrect. + \endomit + + \list 1 + \li In a directory listed in the \c QMAKEFEATURES environment variable that + contains a colon-separated list of directories. + \li In a directory listed in the \c QMAKEFEATURES property variable that + contains a colon-spearated list of directories. + \omit + \li In a features directory beneath the project's root directory (where + the \c{.qmake.cache} file is generated). + \endomit + \li In a features directory residing within a \c mkspecs directory. + \c mkspecs directories can be located beneath any of the directories + listed in the \c QMAKEPATH environment variable that contains a + colon-separated list of directories. For example: + \c{$QMAKEPATH/mkspecs/}. + \li In a features directory residing beneath the directory provided by the + \l{QMAKESPEC} environment variable. For example: \c{$QMAKESPEC/}. + \li In a features directory residing in the \c data_install/mkspecs directory. + For example: \c{data_install/mkspecs/}. + \li In a features directory that exists as a sibling of the directory + specified by the \c QMAKESPEC environment variable. + For example: \c{$QMAKESPEC/../}. + \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 snippets/code/doc_src_qmake-manual.pro 103 + + With this addition to the \c CONFIG variable, + qmake will search the locations listed above for + the \c myfeatures.prf file after it has finished parsing your project file. + On Unix systems, it will look for the following file: + + \list 1 + \li \c $QMAKEFEATURES/myfeatures.prf (for each directory listed in the + \c QMAKEFEATURES environment variable) + \li \c $$QMAKEFEATURES/myfeatures.prf (for each directory listed in the + \c QMAKEFEATURES property variable) + \li \c myfeatures.prf (in the project's root directory) + \li \c $QMAKEPATH/mkspecs/features/unix/myfeatures.prf and + \c $QMAKEPATH/mkspecs/features/myfeatures.prf (for each directory + listed in the \c QMAKEPATH environment variable) + \li \c $QMAKESPEC/features/unix/myfeatures.prf and + \c $QMAKESPEC/features/myfeatures.prf + \li \c data_install/mkspecs/features/unix/myfeatures.prf and + \c data_install/mkspecs/features/myfeatures.prf + \li \c $QMAKESPEC/../features/unix/myfeatures.prf and + \c $QMAKESPEC/../features/myfeatures.prf + \endlist + + \note The \c{.prf} files must have names in lower case. + + \section1 Installing Files + + It is common on Unix to also use the build tool to install applications + and libraries; for example, by invoking \c{make install}. For this reason, + qmake has the concept of an \c {install set}, an + object which contains instructions about the way a part of a project is to + be installed. For example, a collection of documentation files can be + described in the following way: + + \snippet snippets/code/doc_src_qmake-manual.pro 79 + + The \c path member informs qmake that the files + should be installed in \c /usr/local/program/doc (the path member), and the + \c files member specifies the files that should be copied to the + installation directory. In this case, everything in the \c docs directory + will be copied to \c /usr/local/program/doc. + + Once an install set has been fully described, you can append it to the + install list with a line like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 80 + + qmake will ensure that the specified files are + copied to the installation directory. If you require more control over + this process, you can also provide a definition for the \c extra member of + the object. For example, the following line tells + qmake to execute a series of commands for this + install set: + + \snippet snippets/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 snippets/code/doc_src_qmake-manual.pro 82 + + In the above lines, qmake knows what needs to + be copied, and will handle the installation process automatically. + + \section1 Adding Custom Targets + + qmake tries to do everything expected of a + cross-platform build tool. This is often less than ideal when you really + need to run special platform-dependent commands. This can be achieved with + specific instructions to the different qmake backends. + + Customization of the Makefile output is performed through an object-style + API as found in other places in qmake. Objects are defined automatically by + specifying their \e members. For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 86 + + The definitions above define a qmake target called \c mytarget, containing a + Makefile target called \c{.buildfile} which in turn is generated with the + \l{touchfunction}{touch()} function. Finally, the + \c{.depends} member specifies that \c mytarget depends on \c mytarget2, + another target that is defined afterwards. \c mytarget2 is a dummy target. + It is only defined to echo some text to the console. + + The final step is to use the \c QMAKE_EXTRA_TARGETS variable to instruct + qmake that this object is a target to be built: + + \snippet snippets/code/doc_src_qmake-manual.pro 87 + + This is all you need to do to actually build custom targets. Of course, + you may want to tie one of these targets to the + \l{TARGET}{qmake build target}. To do this, you + simply need to include your Makefile target in the list of + \l{PRE_TARGETDEPS}. + + Custom target specifications support the following members: + + \table + \header + \li Member + \li Description + \row + \li commands + \li The commands for generating the custom build target. + \row + \li CONFIG + \li Specific configuration options for the custom build target. Can be + set to \c recursive to indicate that rules should be created in the + Makefile to call the relevant target inside the sub-target specific + Makefile. This member defaults to creating an entry for each of the + sub-targets. + \row + \li depends + \li The existing build targets that the custom build target depends on. + \row + \li recurse + \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 snippets/code/doc_src_qmake-manual.pro 88 + + With the above definitions, you can use a drop-in replacement for moc if one + is available. The command is executed on all arguments given to the + \c NEW_HEADERS variable (from the \c input member), and the result is written + to the file defined by the \c output member. This file is added to the + other source files in the project. Additionally, qmake will execute + \c depend_command to generate dependency information, and place this + information in the project as well. + + Custom compiler specifications support the following members: + + \table + \header + \li Member + \li Description + \row + \li commands + \li The commands used for for generating the output from the input. + \row + \li CONFIG + \li Specific configuration options for the custom compiler. See the + CONFIG table for details. + \row + \li depend_command + \li Specifies a command used to generate the list of dependencies for + the output. + \row + \li dependency_type + \li Specifies the type of file the output is. If it is a known type + (such as TYPE_C, TYPE_UI, TYPE_QRC), it is handled as one of those + type of files. + \row + \li depends + \li Specifies the dependencies of the output file. + \row + \li input + \li The variable that specifies the files that should be processed with + the custom compiler. + \row + \li name + \li A description of what the custom compiler is doing. This is only + used in some backends. + \row + \li output + \li The filename that is created from the custom compiler. + \row + \li output_function + \li Specifies a custom qmake function that is used to specify the + filename to be created. + \row + \li variables + \li Indicates that the variables specified here are replaced with + $(QMAKE_COMP_VARNAME) when referred to in the pro file as + $(VARNAME). + \row + \li variable_out + \li The variable that the files created from the output should be added + to. + \endtable + + The CONFIG member supports the following options: + + \table + \header + \li Option + \li Description + \row + \li combine + \li Indicates that all of the input files are combined into a single + output file. + \row + \li target_predeps + \li Indicates that the output should be added to the list of + \l{PRE_TARGETDEPS}. + \row + \li explicit_dependencies + \li The dependencies for the output only get generated from the depends + member and from nowhere else. + \row + \li no_link + \li Indicates that the output should not be added to the list of objects + to be linked in. + \endtable + + \target LibDepend + \section1 Library Dependencies + + Often when linking against a library, qmake + relies on the underlying platform to know what other libraries this + library links against, and lets the platform pull them in. In many cases, + however, this is not sufficient. For example, when statically linking a + library, no other libraries are linked to, and therefore no dependencies + to those libraries are created. However, an application that later links + against this library will need to know where to find the symbols that + the static library will require. qmake attempts to keep track of the + dependencies of a library, where appropriate, if you explicitly enable + tracking. + + The first step is to enable dependency tracking in the library itself. + To do this you must tell qmake to save information about the library: + + \snippet snippets/code/doc_src_qmake-manual.pro 83 + + This is only relevant to the \c lib template, and will be ignored for all + others. When this option is enabled, qmake will create a file ending in .prl + which will save some meta-information about the library. This metafile is + just like an ordinary project file, but only contains internal variable + declarations. When installing this library, by specifying it as a target in + an \l{INSTALLS} declaration, qmake will automatically copy the .prl file to + the installation path. + + The second step in this process is to enable reading of this meta + information in the applications that use the static library: + + \snippet snippets/code/doc_src_qmake-manual.pro 84 + + When this is enabled, qmake will process all + libraries linked to by the application and find their meta-information. + qmake will use this to determine the relevant + linking information, specifically adding values to the application project + file's list of \l{DEFINES} as well as \l{LIBS}. Once + qmake has processed this file, it will then + look through the newly introduced libraries in the \c LIBS variable, and + find their dependent .prl files, continuing until all libraries have been + resolved. At this point, the Makefile is created as usual, and the + libraries are linked explicitly against the application. + + The .prl files should be created by qmake only, and should not be + transferred between operating systems, as they may contain + platform-dependent information. +*/ + +/*! + \page qmake-precompiledheaders.html + \title Using Precompiled Headers + \contentspage {qmake Manual}{Contents} + \previouspage Advanced Usage + \nextpage Configuring qmake + + \target Introduction + + Precompiled headers (PCH) are a performance feature supported by some + compilers to compile a stable body of code, and store the compiled + state of the code in a binary file. During subsequent compilations, + the compiler will load the stored state, and continue compiling the + specified file. Each subsequent compilation is faster because the + stable code does not need to be recompiled. + + qmake supports the use of precompiled headers + on some platforms and build environments, including: + \list + \li Windows + \list + \li nmake + \li Visual Studio projects (VS 2008 and later) + \endlist + \li Mac OS X + \list + \li Makefile + \li Xcode + \endlist + \li Unix + \list + \li GCC 3.4 and above + \endlist + \endlist + + \target ADD_PCH + \section1 Adding Precompiled Headers to Your Project + + The precompiled header must contain code which is \e stable + and \e static throughout your project. A typical precompiled header might + look like this: + + \snippet snippets/code/doc_src_qmake-manual.cpp 104 + + \note A precompiled header file needs to separate C includes from + C++ includes, since the precompiled header file for C files may not + contain C++ code. + + \target PROJECT_OPTIONS + \section2 Project Options + + To make your project use precompiled headers, you only need to define the + \l{PRECOMPILED_HEADER} variable in your project file: + + \snippet snippets/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. + + All platforms that support precompiled headers have the configuration + option \c precompile_header set. Using this option, you may trigger + conditional blocks in your project file to add settings when using + precompiled headers. + For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 106 + + \section1 Notes on Possible Issues + + On some platforms, the file name suffix for precompiled header files is + the same as that for other object files. For example, the following + declarations may cause two different object files with the same name to + be generated: + + \snippet snippets/code/doc_src_qmake-manual.pro 107 + + To avoid potential conflicts like these, give distinctive names to header + files that will be precompiled. + + \target EXAMPLE_PROJECT + \section1 Example Project + + You can find the following source code in the + \c{examples/qmake/precompile} directory in the Qt distribution: + + \section2 \c mydialog.ui + + The following image displays the mydialog.ui file in Qt Creator Design mode. + You can view the code in the Edit mode. + + \image qmake-precompile-ui.png + + \section2 \c stable.h + + \snippet snippets/qmake/precompile-stable.h 0 + + \omit + ##Keeping the snippet in qtdoc is a workaround, because it contains code + that would tell qdoc to start a new page. Remove it and put the + following snippet back after modularizing the docs. + \snippet examples/qmake/precompile/stable.h 0 + \endomit + + \section2 \c myobject.h + + \code + #include + + 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 + #include + #include + #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 + #include + #include + #include "myobject.h" + #include "mydialog.h" + + int main(int argc, char **argv) + { + QApplication app(argc, argv); + + MyObject obj; + MyDialog dialog; + + dialog.connect(dialog.aButton, SIGNAL(clicked()), SLOT(close())); + dialog.show(); + + return app.exec(); + } + \endcode + + \omit + \snippet examples/qmake/precompile/main.cpp 0 + \endomit + + \section2 \c precompile.pro + + \code + TEMPLATE = app + LANGUAGE = C++ + CONFIG += console precompile_header + CONFIG -= app_bundle + + # Use Precompiled headers (PCH) + PRECOMPILED_HEADER = stable.h + + HEADERS = stable.h \ + mydialog.h \ + myobject.h + SOURCES = main.cpp \ + mydialog.cpp \ + myobject.cpp \ + util.cpp + FORMS = mydialog.ui + \endcode + + \omit + \snippet examples/qmake/precompile/precompile.pro 0 + \endomit +*/ + +/*! + \page qmake-tutorial.html + \title Getting Started + \contentspage {qmake Manual}{Contents} + \previouspage Overview + \nextpage Creating Project Files + + This tutorial teaches you the basics of qmake. The other topics in this + manual contain more detailed information about using qmake. + + \section1 Starting off Simple + + Let's assume that you have just finished a basic implementation of + your application, and you have created the following files: + + \list + \li hello.cpp + \li hello.h + \li main.cpp + \endlist + + You will find these files in the \c{examples/qmake/tutorial} directory + of the Qt distribution. The only other thing you know about the setup of + the application is that it's written in Qt. First, using your favorite + plain text editor, create a file called \c hello.pro in + \c{examples/qmake/tutorial}. The first thing you need to do is add the + lines that tell qmake about the source and + header files that are part of your development project. + + We'll add the source files to the project file first. To do this you + need to use the \l{SOURCES} variable. + Just start a new line with \c {SOURCES +=} and put hello.cpp after it. + You should have something like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 108 + + We repeat this for each source file in the project, until we end up + with the following: + + \snippet snippets/code/doc_src_qmake-manual.pro 109 + + If you prefer to use a Make-like syntax, with all the files listed in + one go you can use the newline escaping like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 110 + + Now that the source files are listed in the project file, the header + files must be added. These are added in exactly the same way as source + files, except that the variable name we use is \l{HEADERS}. + + Once you have done this, your project file should look something like + this: + + \snippet snippets/code/doc_src_qmake-manual.pro 111 + + The target name is set automatically. It is the same as the project + filename, but with the suffix appropriate for the platform. For example, if + 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 snippets/code/doc_src_qmake-manual.pro 112 + + The finished project file should look like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 113 + + You can now use qmake to generate a Makefile + for your application. On the command line, in your project directory, + type the following: + + \snippet snippets/code/doc_src_qmake-manual.pro 114 + + Then type \c make or \c nmake depending on the compiler you use. + + For Visual Studio users, qmake can also generate Visual Studio project + files. For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 115 + + \section1 Making an Application Debuggable + + The release version of an application does not contain any debugging + symbols or other debugging information. During development, it is useful + to produce a debugging version of the application that has the + relevant information. This is easily achieved by adding \c debug to the + \l{CONFIG} variable in the project file. + + For example: + + \snippet snippets/code/doc_src_qmake-manual.pro 116 + + Use qmake as before to generate a Makefile. You will now obtain useful + information about your application when running it in a debugging + environment. + + \section1 Adding Platform-Specific Source Files + + After a few hours of coding, you might have made a start on the + platform-specific part of your application, and decided to keep the + platform-dependent code separate. So you now have two new files to + include into your project file: \c hellowin.cpp and \c + hellounix.cpp. We cannot just add these to the \c SOURCES + variable since that would place both files in the Makefile. So, what we + need to do here is to use a scope which will be processed depending on + which platform we are building for. + + A simple scope that adds the platform-dependent file for + Windows looks like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 117 + + When building for Windows, qmake adds \c hellowin.cpp to the list of source + files. When building for any other platform, qmake simply ignores it. Now + all that is left to be done is to create a scope for the Unix-specific file. + + When you have done that, your project file should look + something like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 118 + + Use qmake as before to generate a Makefile. + + \section1 Stopping qmake If a File Does Not Exist + + You may not want to create a Makefile if a certain file does not exist. + We can check if a file exists by using the \l{exists(filename)}{exists()} + 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 snippets/code/doc_src_qmake-manual.pro 119 + + The \c{!} symbol is used to negate the test. That is, \c{exists( main.cpp )} + is true if the file exists, and \c{!exists( main.cpp )} is true if the + file does not exist. + + \snippet snippets/code/doc_src_qmake-manual.pro 120 + + Use qmake as before to generate a makefile. + If you rename \c main.cpp temporarily, you will see the message and + qmake will stop processing. + + \section1 Checking for More than One Condition + + Suppose you use Windows and you want to be able to see statement + output with \c {qDebug()} when you run your application on the command line. + To see the output, you must build your application with the appropriate + console setting. We can easily put \c console on the \c CONFIG + line to include this setting in the Makefile on Windows. However, + let's say that we only want to add the \c CONFIG line when we are running + on Windows \e and when \c debug is already on the \c CONFIG line. + This requires using two nested scopes. First create one scope, then create + the other inside it. Put the settings to be processed inside the second + scope, like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 121 + + Nested scopes can be joined together using colons, so the final + project file looks like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 122 + + That's it! You have now completed the tutorial for + qmake, and are ready to write project files for + your development projects. +*/ + +/*! + \page qmake-common-projects.html + \title Building Common Project Types + \contentspage {qmake Manual}{Contents} + \previouspage Creating Project Files + \nextpage Running qmake + + This chapter describes how to set up qmake project files for three common + project types that are based on Qt: application, library, and plugin. + Although all project types use many of the same variables, each of + them uses project-specific variables to customize output files. + + Platform-specific variables are not described here. For more information, + see \l{Deploying an Application on Windows} and + \l{Developing Qt Applications for Mac OS X}. + + \target Application + \section1 Building an Application + + The \c app template tells qmake to generate a + Makefile that will build an application. With this template, the type of + application can be specified by adding one of the following options to the + \l{CONFIG} variable definition: + + \table + \header \li Option \li Description + \row \li windows \li The application is a Windows GUI application. + \row \li console \li \c app template only: the application is a Windows console + application. + \row \li testcase \li The application is \l{Building a Testcase}{an automated test}. + \endtable + + When using this template, the following qmake + system variables are recognized. You should use these in your .pro file to + specify information about your application. + + \list + \li \l{HEADERS} - A list of header files for the application. + \li \l{SOURCES} - A list of C++ source files for the application. + \li \l{FORMS} - A list of UI files for the application (created using + Qt Designer). + \li \l{LEXSOURCES} - A list of Lex source files for the application. + \li \l{YACCSOURCES} - A list of Yacc source files for the + application. + \li \l{TARGET} - Name of the executable for the application. This defaults + to the name of the project file. (The extension, if any, is added + automatically). + \li \l{DESTDIR} - The directory in which the target executable is placed. + \li \l{DEFINES} - A list of any additional pre-processor defines needed for + the application. + \li \l{INCLUDEPATH} - A list of any additional include paths needed for the + application. + \li \l{DEPENDPATH} - The dependency search path for the application. + \li \l{VPATH} - The search path to find supplied files. + \li \l{DEF_FILE} - Windows only: A .def file to be linked against for the + application. + \li \l{RC_FILE} - Windows only: A resource file for the application. + \li \l{RES_FILE} - Windows only: A resource file to be linked against for + the application. + \endlist + + You only need to use the system variables that you have values for. For + example, if you do not have any extra INCLUDEPATHs then you do not need + to specify any. qmake will add the necessary default values. + An example project file might look like this: + + \snippet snippets/code/doc_src_qmake-manual.pro 123 + + For items that are single valued, such as the template or the destination + directory, we use "="; but for multi-valued items we use "+=" to \e + add to the existing items of that type. Using "=" replaces the variable + value with the new value. For example, if we write \c{DEFINES=USE_MY_STUFF}, + all other definitions are deleted. + + \section1 Building a Testcase + + A testcase project is an \c app project intended to be run as an automated + test. Any \c app may be marked as a testcase by adding the value \c testcase + to the \c CONFIG variable. + + For testcase projects, qmake will insert a \c check + target into the generated Makefile. This target will run the application. + The test is considered to pass if it terminates with an exit code equal to zero. + + The \c check target automatically recurses through + \l{SUBDIRS} projects. This means it is + possible to issue a \c{make check} command from within a SUBDIRS project + to run an entire test suite. + + The execution of the \c check target may be customized by certain Makefile + variables. These variables are: + + \table + \header + \li Variable + \li Description + \row + \li TESTRUNNER + \li A command or shell fragment prepended to each test command. An example + use-case is a "timeout" script which will terminate a test if it does not + complete within a specified time. + \row + \li TESTARGS + \li Additional arguments appended to each test command. For example, it may + be useful to pass additional arguments to set the output file and format + from the test (such as the \c{-o filename,format} option supported by + \l{QTestLib}). + \endtable + + \note The variables must be set while invoking the \c make tool, not in the + .pro file. Most \c make tools support the setting of Makefile variables directly + on the command-line: + + \code + # Run tests through test-wrapper and use xunitxml output format. + # In this example, test-wrapper is a fictional wrapper script which terminates + # a test if it does not complete within the amount of seconds set by "--timeout". + # The "-o result.xml,xunitxml" options are interpreted by QTestLib. + make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,xunitxml" + \endcode + + Testcase projects may be further customized with the following \c CONFIG options: + + \table + \header + \li Option + \li Description + \row + \li insignificant_test + \li The exit code of the test will be ignored during \c{make check}. + \endtable + + Testcases will often be written with \l{QTest} or \l{TestCase}, but + that is not a requirement to make use of \c{CONFIG+=testcase} and \c{make check}. + The only primary requirement is that the test program exit with a zero exit code + on success, and a non-zero exit code on failure. + + \target Library + \section1 Building a Library + + The \c lib template tells qmake to generate a Makefile that will build a + library. When using this template, the \l{VERSION} variable is supported, + in addition to the system variables that the \c app template supports. Use + the variables in your .pro file to specify information about the library. + + When using the \c lib template, the following options can be added to the + \l{CONFIG} variable to determine the type of library that is built: + + \table + \header \li Option \li Description + \row \li dll \li The library is a shared library (dll). + \row \li staticlib \li The library is a static library. + \row \li plugin \li The library is a plugin. + \endtable + + The following option can also be defined to provide additional information about + the library. + + \list + \li VERSION - The version number of the target library. For example, 2.3.1. + \endlist + + The target file name for the library is platform-dependent. For example, on + X11 and Mac OS X, the library name will be prefixed by \c lib. On Windows, + no prefix is added to the file name. + + \target Plugin + \section1 Building a Plugin + + Plugins are built using the \c lib template, as described in the previous + section. This tells qmake to generate a + Makefile for the project that will build a plugin in a suitable form for + each platform, usually in the form of a library. As with ordinary + libraries, the \l{VERSION} variable is used to specify information about the + plugin. + + \list + \li VERSION - The version number of the target library. For example, 2.3.1. + \endlist + + \section2 Building a Qt Designer Plugin + + \QD plugins are built using a specific set of configuration settings that + depend on the way Qt was configured for your system. For convenience, these + settings can be enabled by adding \c designer to the \l{Variables#QT}{QT} + variable. For example: + + \code + QT += widgets designer + \endcode + + See the \l{Qt Designer Examples} for more examples of plugin-based projects. + + \section1 Building and Installing in Debug and Release Modes + + Sometimes, it is necessary to build a project in both debug and release + modes. Although the \l{CONFIG} variable can hold both \c debug and \c release + options, the \c debug option overrides the \c release option. + + \section2 Building in Both Modes + + To enable a project to be built in both modes, you must add the + \c debug_and_release option to the \c CONFIG variable: + + \snippet snippets/qmake/debug_and_release.pro 0 + \snippet snippets/qmake/debug_and_release.pro 1 + + The scope in the above snippet modifies the build target in each mode to + ensure that the resulting targets have different names. Providing different + names for targets ensures that one will not overwrite the other. + + When qmake processes the project file, it will + generate a Makefile rule to allow the project to be built in both modes. + This can be invoked in the following way: + + \snippet snippets/code/doc_src_qmake-manual.pro 124 + + The \c build_all option can be added to the \c CONFIG variable in the + project file to ensure that the project is built in both modes by default: + + \snippet snippets/qmake/debug_and_release.pro 2 + + This allows the Makefile to be processed using the default rule: + + \snippet snippets/code/doc_src_qmake-manual.pro 125 + + \section2 Installing in Both Modes + + The \c build_all option also ensures that both versions of the target + will be installed when the installation rule is invoked: + + \snippet snippets/code/doc_src_qmake-manual.pro 126 + + It is possible to customize the names of the build targets depending on + the target platform. For example, a library or plugin may be named using a + different convention on Windows from the one used on Unix platforms: + + \omit + Note: This was originally used in the customwidgetplugin.pro file, but is + no longer needed there. + \endomit + \snippet snippets/code/doc_src_qmake-manual.pro 127 + + The default behavior in the above snippet is to modify the name used for + the build target when building in debug mode. An \c else clause could be + added to the scope to do the same for release mode. Left as it is, the + target name remains unmodified. +*/ + diff --git a/qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp b/qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp new file mode 100644 index 00000000000..bd63e600cdb --- /dev/null +++ b/qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [104] +// Add C includes here + +#if defined __cplusplus +// Add C++ includes here +#include +#include +#include +#include // Qt includes +#include +#include +#include "thirdparty/include/libmain.h" +#include "my_stable_class.h" +... +#endif +//! [104] + + diff --git a/qmake/doc/src/snippets/code/doc_src_qmake-manual.pro b/qmake/doc/src/snippets/code/doc_src_qmake-manual.pro new file mode 100644 index 00000000000..0ee47858875 --- /dev/null +++ b/qmake/doc/src/snippets/code/doc_src_qmake-manual.pro @@ -0,0 +1,917 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [0] +make all +#! [0] + + +#! [1] +CONFIG += qt debug +#! [1] + + +#! [2] +QT += network xml +#! [2] + + +#! [3] +QT = network xml # This will omit the core and gui modules. +#! [3] + + +#! [4] +QT -= gui # Only the core module is used. +#! [4] + + +#! [5] +CONFIG += link_pkgconfig +PKGCONFIG += ogg dbus-1 +#! [5] + + +#! [6] +LIBS += -L/usr/local/lib -lmath +#! [6] + + +#! [7] +INCLUDEPATH = c:/msdev/include d:/stl/include +#! [7] + + +#! [8] +qmake [mode] [options] files +#! [8] + + +#! [9] +qmake -makefile [options] files +#! [9] + + +#! [10] +qmake -makefile -o Makefile "CONFIG+=test" test.pro +#! [10] + + +#! [11] +qmake "CONFIG+=test" test.pro +#! [11] + + +#! [12] +qmake -project [options] files +#! [12] + + +#! [13] +qmake -spec macx-g++ +#! [13] + + +#! [14] +QMAKE_LFLAGS += -F/path/to/framework/directory/ +#! [14] + + +#! [15] +LIBS += -framework TheFramework +#! [15] + + +#! [16] +TEMPLATE = lib +CONFIG += lib_bundle +#! [16] + + +#! [17] +FRAMEWORK_HEADERS.version = Versions +FRAMEWORK_HEADERS.files = path/to/header_one.h path/to/header_two.h +FRAMEWORK_HEADERS.path = Headers +QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS +#! [17] + + +#! [19] +qmake -spec macx-xcode project.pro +#! [19] + + +#! [20] +qmake -tp vc +#! [20] + + +#! [21] +qmake -tp vc -r +#! [21] + + +#! [22] +CONFIG -= embed_manifest_exe +#! [22] + + +#! [23] +CONFIG -= embed_manifest_dll +#! [23] + + +#! [24] +make all +#! [24] + + +#! [25] +build_pass:CONFIG(debug, debug|release) { + unix: TARGET = $$join(TARGET,,,_debug) + else: TARGET = $$join(TARGET,,,d) +} +#! [25] + + +#! [26] +CONFIG += console newstuff +... +newstuff { + SOURCES += new.cpp + HEADERS += new.h +} +#! [26] + + +#! [27] +DEFINES += USE_MY_STUFF +#! [27] + + +#! [28] +myFiles.files = path\*.png +DEPLOYMENT += myFiles +#! [28] + + +#! [29] +myFiles.files = path\file1.ext1 path2\file2.ext1 path3\* +myFiles.path = \some\path\on\device +someother.files = C:\additional\files\* +someother.path = \myFiles\path2 +DEPLOYMENT += myFiles someother +#! [29] + + +#! [30] +DESTDIR = ../../lib +#! [30] + + +#! [31] +DISTFILES += ../program.txt +#! [31] + + +#! [32] +FORMS = mydialog.ui \ + mywidget.ui \ + myconfig.ui +#! [32] + + +#! [33] +FORMS3 = my_uic3_dialog.ui \ + my_uic3_widget.ui \ + my_uic3_config.ui +#! [33] + + +#! [34] +HEADERS = myclass.h \ + login.h \ + mainwindow.h +#! [34] + + +#! [35] +INCLUDEPATH = c:/msdev/include d:/stl/include +#! [35] + + +#! [36] +target.path += $$[QT_INSTALL_PLUGINS]/imageformats +INSTALLS += target +#! [36] + + +#! [37] +LEXSOURCES = lexer.l +#! [37] + + +#! [38] +unix:LIBS += -L/usr/local/lib -lmath +win32:LIBS += c:/mylibs/math.lib +#! [38] + + +#! [39] +CONFIG += no_lflags_merge +#! [39] + + +#! [40] +unix:MOC_DIR = ../myproject/tmp +win32:MOC_DIR = c:/myproject/tmp +#! [40] + + +#! [41] +unix:OBJECTS_DIR = ../myproject/tmp +win32:OBJECTS_DIR = c:/myproject/tmp +#! [41] + + +#! [43] +FRAMEWORK_HEADERS.version = Versions +FRAMEWORK_HEADERS.files = path/to/header_one.h path/to/header_two.h +FRAMEWORK_HEADERS.path = Headers +QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS +#! [43] + + +#! [44] +QMAKE_BUNDLE_EXTENSION = .myframework +#! [44] + + +#! [45] +QMAKE_RESOURCE_FLAGS += -threshold 0 -compress 9 +#! [45] + + +#! [47] +QT -= gui # Only the core module is used. +#! [47] + + +#! [48] +unix:RCC_DIR = ../myproject/resources +win32:RCC_DIR = c:/myproject/resources +#! [48] + + +#! [49] +SOURCES = myclass.cpp \ + login.cpp \ + mainwindow.cpp +#! [49] + + +#! [50] +SUBDIRS = kernel \ + tools +#! [50] + + +#! [51] +CONFIG += ordered +#! [51] + + +#! [52] +TEMPLATE = app +TARGET = myapp +SOURCES = main.cpp +#! [52] + + +#! [53] +TEMPLATE = lib +SOURCES = main.cpp +TARGET = mylib +#! [53] + + +#! [54] +unix:UI_DIR = ../myproject/ui +win32:UI_DIR = c:/myproject/ui +#! [54] + + +#! [57] +VERSION = 1.2.3 +#! [57] + + +#! [58] +YACCSOURCES = moc.y +#! [58] + + +#! [59] +FILE = /etc/passwd +FILENAME = $$basename(FILE) #passwd +#! [59] + + +#! [60] +CONFIG = debug +CONFIG += release +CONFIG(release, debug|release):message(Release build!) #will print +CONFIG(debug, debug|release):message(Debug build!) #no print +#! [60] + + +#! [61] +contains( drivers, network ) { + # drivers contains 'network' + message( "Configuring for network build..." ) + HEADERS += network.h + SOURCES += network.cpp +} +#! [61] + + +#! [62] +error(An error has occurred in the configuration process.) +#! [62] + + +#! [63] +exists( $(QTDIR)/lib/libqt-mt* ) { + message( "Configuring for multi-threaded Qt..." ) + CONFIG += thread +} +#! [63] + + +#! [64] +MY_VAR = one two three four +MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive +MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*) +#! [64] + + +#! [65] +LIST = 1 2 3 +for(a, LIST):exists(file.$${a}):message(I see a file.$${a}!) +#! [65] + + +#! [66] +include( shared.pri ) +OPTIONS = standard custom +!include( options.pri ) { + message( "No custom build options specified" ) +OPTIONS -= custom +} +#! [66] + + +#! [67] +isEmpty( CONFIG ) { +CONFIG += warn_on debug +} +#! [67] + + +#! [68] +message( "This is a message" ) +#! [68] + + +#! [69] +!build_pass:message( "This is a message" ) +#! [69] + + +#! [70] +This is a test. +#! [70] + + +#! [71] +system(ls /bin):HAS_BIN=FALSE +#! [71] + + +#! [72] +UNAME = $$system(uname -s) +contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me ) +#! [72] + + +#! [73] +ARGS = 1 2 3 2 5 1 +ARGS = $$unique(ARGS) #1 2 3 5 +#! [73] + + +#! [74] +qmake -set PROPERTY VALUE +#! [74] + + +#! [75] +qmake -query PROPERTY +qmake -query #queries all current PROPERTY/VALUE pairs +#! [75] + + +#! [77] +qmake -query "QT_INSTALL_PREFIX" +#! [77] + + +#! [78] +QMAKE_VERS = $$[QMAKE_VERSION] +#! [78] + + +#! [79] +documentation.path = /usr/local/program/doc +documentation.files = docs/* +#! [79] + + +#! [80] +INSTALLS += documentation +#! [80] + + +#! [81] +unix:documentation.extra = create_docs; mv master.doc toc.doc +#! [81] + + +#! [82] +target.path = /usr/local/myprogram +INSTALLS += target +#! [82] + + +#! [83] +CONFIG += create_prl +#! [83] + + +#! [84] +CONFIG += link_prl +#! [84] + + +#! [85] +QMAKE_EXT_MOC = .mymoc +#! [85] + + +#! [86] +mytarget.target = .buildfile +mytarget.commands = touch $$mytarget.target +mytarget.depends = mytarget2 + +mytarget2.commands = @echo Building $$mytarget.target +#! [86] + + +#! [87] +QMAKE_EXTRA_TARGETS += mytarget mytarget2 +#! [87] + + +#! [88] +new_moc.output = moc_${QMAKE_FILE_BASE}.cpp +new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} +new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,," +new_moc.input = NEW_HEADERS +QMAKE_EXTRA_COMPILERS += new_moc +#! [88] + + +#! [89] +TARGET = myapp +#! [89] + + +#! [90] +DEFINES += USE_MY_STUFF +#! [90] + + +#! [91] +DEFINES -= USE_MY_STUFF +#! [91] + + +#! [92] +DEFINES *= USE_MY_STUFF +#! [92] + + +#! [93] +DEFINES ~= s/QT_[DT].+/QT +#! [93] + + +#! [94] +EVERYTHING = $$SOURCES $$HEADERS +message("The project contains the following files:") +message($$EVERYTHING) +#! [94] + + +#! [95] +win32:DEFINES += USE_MY_STUFF +#! [95] + + +#! [96] +win32:xml { + message(Building for Windows) + SOURCES += xmlhandler_win.cpp +} else:xml { + SOURCES += xmlhandler.cpp +} else { + message("Unknown configuration") +} +#! [96] + + +#! [97] +MY_VARIABLE = value +#! [97] + + +#! [98] +MY_DEFINES = $$DEFINES +#! [98] + + +#! [99] +MY_DEFINES = $${DEFINES} +#! [99] + + +#! [100] +TARGET = myproject_$${TEMPLATE} +#! [100] + + +#! [101] +target.path = $$[QT_INSTALL_PLUGINS]/designer +INSTALLS += target +#! [101] + + +#! [102] +defineReplace(functionName){ + #function code +} +#! [102] + + +#! [103] +CONFIG += myfeatures +#! [103] + + +#! [105] +PRECOMPILED_HEADER = stable.h +#! [105] + + +#! [106] +precompile_header:!isEmpty(PRECOMPILED_HEADER) { +DEFINES += USING_PCH +} +#! [106] + + +#! [107] +PRECOMPILED_HEADER = window.h +SOURCES = window.cpp +#! [107] + + +#! [108] +SOURCES += hello.cpp +#! [108] + + +#! [109] +SOURCES += hello.cpp +SOURCES += main.cpp +#! [109] + + +#! [110] +SOURCES = hello.cpp \ + main.cpp +#! [110] + + +#! [111] +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +#! [111] + + +#! [112] +TARGET = helloworld +#! [112] + + +#! [113] +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +#! [113] + + +#! [114] +qmake -o Makefile hello.pro +#! [114] + + +#! [115] +qmake -tp vc hello.pro +#! [115] + + +#! [116] +CONFIG += debug +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +#! [116] + + +#! [117] +win32 { + SOURCES += hellowin.cpp +} +#! [117] + + +#! [118] +CONFIG += debug +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +win32 { + SOURCES += hellowin.cpp +} +unix { + SOURCES += hellounix.cpp +} +#! [118] + + +#! [119] +!exists( main.cpp ) { + error( "No main.cpp file found" ) +} +#! [119] + + +#! [120] +CONFIG += debug +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +win32 { + SOURCES += hellowin.cpp +} +unix { + SOURCES += hellounix.cpp +} +!exists( main.cpp ) { + error( "No main.cpp file found" ) +} +#! [120] + + +#! [121] +win32 { + debug { + CONFIG += console + } +} +#! [121] + + +#! [122] +CONFIG += debug +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +win32 { + SOURCES += hellowin.cpp +} +unix { + SOURCES += hellounix.cpp +} +!exists( main.cpp ) { + error( "No main.cpp file found" ) +} +win32:debug { + CONFIG += console +} +#! [122] + + +#! [123] +TEMPLATE = app +DESTDIR = c:/helloapp +HEADERS += hello.h +SOURCES += hello.cpp +SOURCES += main.cpp +DEFINES += USE_MY_STUFF +CONFIG += release +#! [123] + + +#! [124] +make all +#! [124] + + +#! [125] +make +#! [125] + + +#! [126] +make install +#! [126] + + +#! [127] +CONFIG(debug, debug|release) { + mac: TARGET = $$join(TARGET,,,_debug) + win32: TARGET = $$join(TARGET,,d) +} +#! [127] + +#! [142] +DEPLOYMENT_PLUGIN += qjpeg +#! [142] + +#! [149] +SUBDIRS += my_executable my_library +my_executable.subdir = app +my_executable.depends = my_library +my_library.subdir = lib +#! [149] + +#! [157] +packagesExist(sqlite3 QtNetwork QtDeclarative) { + DEFINES += USE_FANCY_UI +} +#! [157] + +#! [158] +#ifdef USE_FANCY_UI + // Use the fancy UI, as we have extra packages available +#endif +#! [158] + +#! [159] +message($$absolute_path("readme.txt", "/home/johndoe/myproject")) +#! [159] + + +#! [160] +TARGET = helloworld +equals(TARGET, "helloworld") { + message("The target assignment was successful.") +} +#! [160] + + +#! [161] +CONTACT = firstname middlename surname phone +message($$first(CONTACT)) +#! [161] + + +#! [162] +CONTACT = firstname middlename surname phone +message($$last(CONTACT)) +#! [162] + + +#! [163] +message($$format_number(BAD, ibase=16 width=6 zeropad)) +#! [163] + + +#! [164] +ANSWER = 42 +greaterThan(ANSWER, 1) { + message("The answer might be correct.") +} +#! [164] + + +#! [165] +ANSWER = 42 +lessThan(ANSWER, 1) { + message("The answer might be wrong.") +} +#! [165] + + +#! [166] +if(linux-g++*|macx-g++*):CONFIG(debug, debug|release) { + message("We are on Linux or Mac OS, and we are in debug mode.") +} +#! [166] + + +#! [167] +CONTACT = firstname:middlename:surname:phone +message($$section(CONTACT, :, 2, 2)) +#! [167] + + +#! [168] +CONTACT = firstname:middlename:surname:phone +message($$split(CONTACT, :)) +#! [168] + +#! [169] +NARF = zort +unset(NARF) +!defined(NARF, var) { + message("NARF is not defined.") +} +#! [169] + + +#! [170] +for(var, $$list(foo bar baz)) { + ... +} +#! [170] + + +#! [171] +values = foo bar baz +for(var, values) { + ... +} +#! [171] + + +#! [172] +VALUE = 123 +TMP_VALUE = x$$VALUE +greaterThan(TMP_VALUE, x456): message("Condition may be true.") +#! [172] + + +#! [173] +message("First line$$escape_expand(\\n)Second line") +#! [173] diff --git a/qmake/doc/src/snippets/qmake/comments.pro b/qmake/doc/src/snippets/qmake/comments.pro new file mode 100644 index 00000000000..957052c81d5 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/comments.pro @@ -0,0 +1,10 @@ +#! [0] +# Comments usually start at the beginning of a line, but they +# can also follow other content on the same line. +#! [0] + +#! [1] +# To include a literal hash character, use the $$LITERAL_HASH variable: +urlPieces = http://qt-project.org/doc/qt-5.0/qtgui/qtextdocument.html pageCount +message($$join(urlPieces, $$LITERAL_HASH)) +#! [1] diff --git a/qmake/doc/src/snippets/qmake/configscopes.pro b/qmake/doc/src/snippets/qmake/configscopes.pro new file mode 100644 index 00000000000..6ab7f7c428a --- /dev/null +++ b/qmake/doc/src/snippets/qmake/configscopes.pro @@ -0,0 +1,23 @@ +SOURCES = main.cpp +#! [0] +CONFIG += opengl +#! [0] + +#! [1] +opengl { + TARGET = application-gl +} else { +#! [1] #! [2] + TARGET = application +#! [2] #! [3] +} +#! [3] + +#! [4] +CONFIG(opengl) { + message(Building with OpenGL support.) +} else { +#! [4] #! [5] + message(OpenGL support is not available.) +} +#! [5] diff --git a/qmake/doc/src/snippets/qmake/debug_and_release.pro b/qmake/doc/src/snippets/qmake/debug_and_release.pro new file mode 100644 index 00000000000..92e8dbf76aa --- /dev/null +++ b/qmake/doc/src/snippets/qmake/debug_and_release.pro @@ -0,0 +1,14 @@ +#! [0] +CONFIG += debug_and_release + +CONFIG(debug, debug|release) { + TARGET = debug_binary +} else { +#! [0] #! [1] + TARGET = release_binary +} +#! [1] + +#! [2] +CONFIG += build_all +#! [2] diff --git a/qmake/doc/src/snippets/qmake/delegate.h b/qmake/doc/src/snippets/qmake/delegate.h new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/delegate.h @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/dereferencing.pro b/qmake/doc/src/snippets/qmake/dereferencing.pro new file mode 100644 index 00000000000..ff0c97995cf --- /dev/null +++ b/qmake/doc/src/snippets/qmake/dereferencing.pro @@ -0,0 +1,5 @@ +#! [0] +TEMP_SOURCES = $$SOURCES +#! [0] +# Do something with the SOURCES variable then restore its old value. +SOURCES = $$TEMP_SOURCES diff --git a/qmake/doc/src/snippets/qmake/destdir.pro b/qmake/doc/src/snippets/qmake/destdir.pro new file mode 100644 index 00000000000..b2f943904a1 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/destdir.pro @@ -0,0 +1,2 @@ +SOURCES = main.cpp +DESTDIR = output diff --git a/qmake/doc/src/snippets/qmake/dirname.pro b/qmake/doc/src/snippets/qmake/dirname.pro new file mode 100644 index 00000000000..59e1f20b3f6 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/dirname.pro @@ -0,0 +1,6 @@ +#! [0] +FILE = /etc/X11R6/XF86Config +DIRNAME = $$dirname(FILE) #/etc/X11R6 +#! [0] +message($$FILE) +message($$DIRNAME) diff --git a/qmake/doc/src/snippets/qmake/environment.pro b/qmake/doc/src/snippets/qmake/environment.pro new file mode 100644 index 00000000000..808bdeba474 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/environment.pro @@ -0,0 +1,9 @@ +#! [0] #! [1] +DESTDIR = $$(PWD) +message(The project will be installed in $$DESTDIR) +#! [0] + +DESTDIR = $(PWD) +message(The project will be installed in the value of PWD) +message(when the Makefile is processed.) +#! [1] diff --git a/qmake/doc/src/snippets/qmake/functions.pro b/qmake/doc/src/snippets/qmake/functions.pro new file mode 100644 index 00000000000..2766120719d --- /dev/null +++ b/qmake/doc/src/snippets/qmake/functions.pro @@ -0,0 +1,34 @@ +#! [0] +EXTRAS = handlers tests docs +for(dir, EXTRAS) { + exists($$dir) { + SUBDIRS += $$dir + } +} +#! [0] + +SOURCES = paintwidget_mac.cpp paintwidget_unix.cpp paintwidget_win.cpp +macx { + SOURCES = $$find(SOURCES, "_mac") +} + +#! [1] +HEADERS = model.h +HEADERS += $$OTHER_HEADERS +HEADERS = $$unique(HEADERS) +#! [1] + +CONFIG += debug +#! [2] +options = $$find(CONFIG, "debug") $$find(CONFIG, "release") +#! [3] +count(options, 2) { + message(Both release and debug specified.) +} +#! [2] #! [3] + +#! [4] +eval(TARGET = myapp) { + message($$TARGET) +} +#! [4] diff --git a/qmake/doc/src/snippets/qmake/include.pro b/qmake/doc/src/snippets/qmake/include.pro new file mode 100644 index 00000000000..37e71569573 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/include.pro @@ -0,0 +1,3 @@ +#! [0] +include(other.pro) +#! [0] diff --git a/qmake/doc/src/snippets/qmake/main.cpp b/qmake/doc/src/snippets/qmake/main.cpp new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/main.cpp @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/model.cpp b/qmake/doc/src/snippets/qmake/model.cpp new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/model.cpp @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/model.h b/qmake/doc/src/snippets/qmake/model.h new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/model.h @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/other.pro b/qmake/doc/src/snippets/qmake/other.pro new file mode 100644 index 00000000000..e69de29bb2d diff --git a/qmake/doc/src/snippets/qmake/paintwidget_mac.cpp b/qmake/doc/src/snippets/qmake/paintwidget_mac.cpp new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/paintwidget_mac.cpp @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/paintwidget_unix.cpp b/qmake/doc/src/snippets/qmake/paintwidget_unix.cpp new file mode 100644 index 00000000000..c39fc2cbf68 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/paintwidget_unix.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/qmake/doc/src/snippets/qmake/paintwidget_win.cpp b/qmake/doc/src/snippets/qmake/paintwidget_win.cpp new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/paintwidget_win.cpp @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/doc/src/snippets/qmake/precompile-stable.h b/qmake/doc/src/snippets/qmake/precompile-stable.h new file mode 100644 index 00000000000..eef8cef7285 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/precompile-stable.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +/* Add C includes here */ + +#if defined __cplusplus +/* Add C++ includes here */ + +# include +# include +# include +# include +#endif +//! [0] diff --git a/qmake/doc/src/snippets/qmake/project_location.pro b/qmake/doc/src/snippets/qmake/project_location.pro new file mode 100644 index 00000000000..09d9b3d9d02 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/project_location.pro @@ -0,0 +1,6 @@ +#! [project file] +message($$_PRO_FILE_) +#! [project file] +#! [project file directory] +message($$_PRO_FILE_PWD_) +#! [project file directory] diff --git a/qmake/doc/src/snippets/qmake/qtconfiguration.pro b/qmake/doc/src/snippets/qmake/qtconfiguration.pro new file mode 100644 index 00000000000..55e13be3525 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/qtconfiguration.pro @@ -0,0 +1,18 @@ +# Show information about the Qt installation. +#! [0] +message(Qt version: $$[QT_VERSION]) +message(Qt is installed in $$[QT_INSTALL_PREFIX]) +message(Qt resources can be found in the following locations:) +message(Documentation: $$[QT_INSTALL_DOCS]) +message(Header files: $$[QT_INSTALL_HEADERS]) +message(Libraries: $$[QT_INSTALL_LIBS]) +message(Binary files (executables): $$[QT_INSTALL_BINS]) +message(Plugins: $$[QT_INSTALL_PLUGINS]) +message(Data files: $$[QT_INSTALL_DATA]) +message(Translation files: $$[QT_INSTALL_TRANSLATIONS]) +message(Settings: $$[QT_INSTALL_SETTINGS]) +message(Examples: $$[QT_INSTALL_EXAMPLES]) +#! [0] + +# Show configuration information. +message(CONFIG = $$CONFIG) diff --git a/qmake/doc/src/snippets/qmake/quoting.pro b/qmake/doc/src/snippets/qmake/quoting.pro new file mode 100644 index 00000000000..62efb2042ef --- /dev/null +++ b/qmake/doc/src/snippets/qmake/quoting.pro @@ -0,0 +1,8 @@ +#! [0] +DEST = "Program Files" +#! [0] +count(DEST, 1) { + message(Only one item found in DEST.) +} else { + message(More than one item found in DEST.) +} diff --git a/qmake/doc/src/snippets/qmake/replace.pro b/qmake/doc/src/snippets/qmake/replace.pro new file mode 100644 index 00000000000..504e01a0180 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/replace.pro @@ -0,0 +1,4 @@ +#! [0] +MESSAGE = This is a tent. +message($$replace(MESSAGE, tent, test)) +#! [0] diff --git a/qmake/doc/src/snippets/qmake/replacefunction.pro b/qmake/doc/src/snippets/qmake/replacefunction.pro new file mode 100644 index 00000000000..98013ba42d3 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/replacefunction.pro @@ -0,0 +1,46 @@ +#! [0] +defineReplace(headersAndSources) { + variable = $$1 + names = $$eval($$variable) + headers = + sources = + + for(name, names) { + header = $${name}.h + exists($$header) { + headers += $$header + } + source = $${name}.cpp + exists($$source) { + sources += $$source + } + } + return($$headers $$sources) +} +#! [0] + +defineReplace(matchingFiles) { + names = $$ARGS + files = + + for(name, names) { + header = $${name}.h + source = $${name}.cpp + exists($$header):exists($$source) { + files += $$header + files += $$source + } + } + return($$files) +} + +names = delegate model view main +message(Finding all headers and sources from the following list of names:) +message($$names) +allFiles = $$headersAndSources(names) +message(Found: $$allFiles) + +message(Finding only matching headers and sources from the following list of names:) +message($$names) +matching = $$matchingFiles($$names) +message(Found: $$matching) diff --git a/qmake/doc/src/snippets/qmake/scopes.pro b/qmake/doc/src/snippets/qmake/scopes.pro new file mode 100644 index 00000000000..63b9b3aa55f --- /dev/null +++ b/qmake/doc/src/snippets/qmake/scopes.pro @@ -0,0 +1,42 @@ +#! [syntax] + { + + ... +} +#! [syntax] + +#! [0] +win32 { + SOURCES += paintwidget_win.cpp +} +#! [0] + +#! [1] +!win32 { + SOURCES -= paintwidget_win.cpp +} +#! [1] + +unix { + SOURCES += paintwidget_unix.cpp +} + +#! [2] +macx { + CONFIG(debug, debug|release) { + HEADERS += debugging.h + } +} +#! [2] + +#! [3] +macx:CONFIG(debug, debug|release) { + HEADERS += debugging.h +} +#! [3] + +#! [4] +win32|macx { + HEADERS += debugging.h +} +#! [4] diff --git a/qmake/doc/src/snippets/qmake/shared_or_static.pro b/qmake/doc/src/snippets/qmake/shared_or_static.pro new file mode 100644 index 00000000000..31c25ea44b0 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/shared_or_static.pro @@ -0,0 +1,8 @@ +TEMPLIBS = $$[QT_INSTALL_LIBS] libQtGui.prl +include($$join(TEMPLIBS, "/")) + +contains(QMAKE_PRL_CONFIG, shared) { + message(Shared Qt) +} else { + message(Static Qt) +} diff --git a/qmake/doc/src/snippets/qmake/spaces.pro b/qmake/doc/src/snippets/qmake/spaces.pro new file mode 100644 index 00000000000..614d4c553d2 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/spaces.pro @@ -0,0 +1,9 @@ +#! [quoting library paths with spaces] +win32:LIBS += "C:/mylibs/extra libs/extra.lib" +unix:LIBS += "-L/home/user/extra libs" -lextra +#! [quoting library paths with spaces] + +#! [quoting include paths with spaces] +win32:INCLUDEPATH += "C:/mylibs/extra headers" +unix:INCLUDEPATH += "/home/user/extra headers" +#! [quoting include paths with spaces] diff --git a/qmake/doc/src/snippets/qmake/specifications.pro b/qmake/doc/src/snippets/qmake/specifications.pro new file mode 100644 index 00000000000..f9a0d0a1cbc --- /dev/null +++ b/qmake/doc/src/snippets/qmake/specifications.pro @@ -0,0 +1,7 @@ +#! [0] +message($$QMAKESPEC) + +linux-g++ { + message(Linux) +} +#! [0] diff --git a/qmake/doc/src/snippets/qmake/testfunction.pro b/qmake/doc/src/snippets/qmake/testfunction.pro new file mode 100644 index 00000000000..785ffed6be5 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/testfunction.pro @@ -0,0 +1,20 @@ +#! [0] +defineTest(allFiles) { + files = $$ARGS + + for(file, files) { + !exists($$file) { + return(false) + } + } + return(true) +} +#! [0] + +files = delegate.h model.h view.h + +allFiles($$files) { + message(All files are present: $$files) +} else { + message(Not all files are present: $$files) +} diff --git a/qmake/doc/src/snippets/qmake/variables.pro b/qmake/doc/src/snippets/qmake/variables.pro new file mode 100644 index 00000000000..c1439ba68b1 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/variables.pro @@ -0,0 +1,7 @@ +#! [0] +HEADERS = mainwindow.h paintwidget.h +#! [0] #! [1] +SOURCES = main.cpp mainwindow.cpp \ + paintwidget.cpp +CONFIG += console +#! [1] diff --git a/qmake/doc/src/snippets/qmake/view.h b/qmake/doc/src/snippets/qmake/view.h new file mode 100644 index 00000000000..92c7eb6a489 --- /dev/null +++ b/qmake/doc/src/snippets/qmake/view.h @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/qmake/qmake-docs.pro b/qmake/qmake-docs.pro new file mode 100644 index 00000000000..3123f7c5d86 --- /dev/null +++ b/qmake/qmake-docs.pro @@ -0,0 +1,2 @@ +TEMPLATE = aux +QMAKE_DOCS = $$PWD/doc/qmake.qdocconf diff --git a/qtbase.pro b/qtbase.pro index 02dc11eac2d..5bed630ea93 100644 --- a/qtbase.pro +++ b/qtbase.pro @@ -4,6 +4,8 @@ load(qt_parts) +SUBDIRS += qmake/qmake-docs.pro + cross_compile: CONFIG += nostrip confclean.depends += clean