Including .pro Files: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
(In the example, DEPENDPATH was wrongly typed as DEPENDSPATH)
 
(8 intermediate revisions by 6 users not shown)
Line 1: Line 1:
'''English''' [[IncludingProFiles-Malay|Malay]] [[IncludingProFiles-Spanish|Spanish]] [[IncludingProFiles German|German]] [[IncludingProFiles French|French]] [[IncludingProFiles Bulgarian|Български]]
{{LangSwitch}}
[[Category:Tools]]
[[Category:HowTo]]
QMake's project files sometimes need to rely on the include feature. This is a great tool, but there are some tricks of the trade to be aware of.


=Including pro-files into pro-files=
First up, a convention, pro-files meant for inclusion in other pro-files are commonly named '''.pri, just to indicate that they are for inclusion. This also means that qmake does not find them, but uses the appropriate pro-file instead.'''


QMake’s project files sometimes need to rely on the include feature. This is a great tool, but there are some tricks of the trade to be aware of.
In a pro-file, you have two important variables: INCLUDEPATH and DEPENDPATH. The first is used by the C++ compiler when resolving #include statements, while the latter is used by qmake when trying to determine what to build in which order.


First up, a convention, pro-files meant for inclusion in other pro-files are commonly named *.pri, just to indicate that they are for inclusion. This also means that qmake does not find them, but uses the appropriate pro-file instead.
To create a truly movable source tree, the pri-files update these variables appropriately. My trick to do that is to rely on the current working directory. You find that by running the $$system(pwd) command (on Unix/Linux only - sorry).  


In a pro-file, you have two important variables: <span class="caps">INCLUDEPATH</span> and <span class="caps">DEPENDPATH</span>. The first is used by the C++ compiler when resolving #include statements, while the latter is used by qmake when trying to determine what to build in which order.
Within the [https://doc.qt.io/qt-5/qmake-variable-reference.html qmake variable reference] , there are variables that may help find the current working directory (Tested on Windows ). A couple of these are:
''' [https://doc.qt.io/qt-5/qmake-variable-reference.html#pwd '''PWD''']'''
'''''' Specifies the full path leading to the directory containing the current file being parsed.'''''
* [https://doc.qt.io/qt-5/qmake-variable-reference.html#out-pwd '''OUT_PWD''']
'''''' Specifies the full path leading to the directory where qmake places the generated Makefile.'''''
* The usage of the $$ prefix is detailed [https://doc.qt.io/qt-5/qmake-language.html#variable-expansion here].


To create a truly movable source tree, the pri-files update these variables appropriately. My trick to do that is to rely on the current working directory. You find that by running the $$system(pwd) command (on Unix/Linux only – sorry).
When having set up the include and depend on paths, it is just a matter of adding to the SOURCES, HEADERS, RESOURCES and FORMS sections.


Within the [http://doc.qt.nokia.com/4.7/qmake-variable-reference.html qmake variable reference] ''[doc.qt.nokia.com]'' , there are variables that may help find the current working directory (Tested on Windows ). A couple of these are:
To summarize, here is a small example:


* [http://doc.qt.nokia.com/4.7/qmake-variable-reference.html#pwd '''<span class="caps">PWD</span>'''] ''[doc.qt.nokia.com]''
<code>INCLUDEPATH += $$system(pwd)/include
** This variable contains the full path leading to the directory where the qmake project file (project.pro) is located.
DEPENDPATH += $$system(pwd)
* [http://doc.qt.nokia.com/4.7/qmake-variable-reference.html#out-pwd '''<span class="caps">OUT</span>_PWD'''] ''[doc.qt.nokia.com]''
** This variable contains the full path leading to the directory where qmake places the generated Makefile.
* Usage of the $$ prefix is detailed [http://doc.qt.nokia.com/latest/qmake-advanced-usage.html#variables here] ''[doc.qt.nokia.com]'' .


When having setup the include and depend paths, it is just a matter of adding to the <span class="caps">SOURCES</span>, <span class="caps">HEADERS</span>, <span class="caps">RESOURCES</span> and <span class="caps">FORMS</span> sections.
SOURCES += src/foo.cpp
 
HEADERS += include/foo.h
To summarize, here is a small example:
FORMS += forms/foo.ui
RESOURCES += foo.qrc
</code>


Finally, in the pro-file, simply add the pri-file by calling include:
Finally, in the pro-file, simply add the pri-file by calling include:


==Caveats==
<code>…
 
include(support/foo/foo.pri)
This solution seems to be too clever to the translation tools. To be able to use lrelease and lupdate, you must rely on less dynamic pro/pri-files, or simply find a way to generate a custom pro-file that you just use for translations.
 
</code>
===Categories:===
 
* [[:Category:HowTo|HowTo]]
* [[:Category:Tools|Tools]]

Latest revision as of 06:07, 19 October 2020

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

QMake's project files sometimes need to rely on the include feature. This is a great tool, but there are some tricks of the trade to be aware of.

First up, a convention, pro-files meant for inclusion in other pro-files are commonly named .pri, just to indicate that they are for inclusion. This also means that qmake does not find them, but uses the appropriate pro-file instead.

In a pro-file, you have two important variables: INCLUDEPATH and DEPENDPATH. The first is used by the C++ compiler when resolving #include statements, while the latter is used by qmake when trying to determine what to build in which order.

To create a truly movable source tree, the pri-files update these variables appropriately. My trick to do that is to rely on the current working directory. You find that by running the $$system(pwd) command (on Unix/Linux only - sorry).

Within the qmake variable reference , there are variables that may help find the current working directory (Tested on Windows ). A couple of these are: PWD ' Specifies the full path leading to the directory containing the current file being parsed.

' Specifies the full path leading to the directory where qmake places the generated Makefile.

  • The usage of the $$ prefix is detailed here.

When having set up the include and depend on paths, it is just a matter of adding to the SOURCES, HEADERS, RESOURCES and FORMS sections.

To summarize, here is a small example:

INCLUDEPATH += $$system(pwd)/include
DEPENDPATH += $$system(pwd)

SOURCES += src/foo.cpp
HEADERS += include/foo.h
FORMS += forms/foo.ui
RESOURCES += foo.qrc

Finally, in the pro-file, simply add the pri-file by calling include:


include(support/foo/foo.pri)