summaryrefslogtreecommitdiffstats
path: root/qmake/book/qmake-concepts.leaf
diff options
context:
space:
mode:
Diffstat (limited to 'qmake/book/qmake-concepts.leaf')
-rw-r--r--qmake/book/qmake-concepts.leaf187
1 files changed, 187 insertions, 0 deletions
diff --git a/qmake/book/qmake-concepts.leaf b/qmake/book/qmake-concepts.leaf
new file mode 100644
index 00000000..3f71bdf9
--- /dev/null
+++ b/qmake/book/qmake-concepts.leaf
@@ -0,0 +1,187 @@
+\chapter qmake Concepts
+
+\section1 Introducing qmake
+
+\e qmake is an easy-to-use tool from Trolltech that creates makefiles
+for development projects across different platforms. \e qmake
+simplifies the generation of makefiles so that only a few lines of
+information are needed to create a makefile. \e qmake can be used for
+any software project whether it is written in Qt or not, although it
+also contains additional features to support Qt development.
+
+\e qmake generates a makefile based on the information in a project
+file. Project files are created by the developer. Project files are
+usually simple, but can be tquite sophisticated if retquired.
+\e qmake can also generate projects for Microsoft Visual studio
+without having to change the project file.
+
+\section1 qmake's Concepts
+
+\section2 The QMAKESPEC environment variable
+
+Before \e qmake can be used to build makefiles, the QMAKESPEC
+environment variable must be set to the platform-compiler combination
+that is being used on the system. The QMAKESPEC environment variable
+tells qmake where to look to find platform and compiler specific
+information. This ensures that the right libraries are used, and that
+the generated makefile uses the correct syntax. A list of the
+currently supported platform-compiler combinations can be found in
+qt/mkspecs. Just set your environment variable to one of the
+directories listed.
+
+For example, if you are using Microsoft Visual Studio on Windows, then
+you would set the QMAKESPEC environment variable to \e win32-msvc.
+If you are using gcc on Solaris then you would set your QMAKESPEC
+environment variable to \e solaris-g++.
+
+Inside each of the directories in qt/mkspecs, there is a \e qmake.conf
+file which contains the platform and compiler specific information.
+These settings are applied to any project that is built using \e
+qmake and should not be modified unless you're an expert. For example,
+if all your applications had to link against a particular library, you
+might add this information to the relevant \e qmake.conf file.
+
+\section2 Project (.pro) files
+
+A project file is used to tell \e qmake the details it needs to know
+about creating a makefile for the application. For instance, a list
+of source files and header files that should be put into the project
+file; any application specific configuration, such as an extra library
+that should be linked against, or an extra include path.
+
+\section3 '#' comments
+
+You can add comments to project files. Comments begin with the '#'
+symbol and run to the end of the line.
+
+\section2 Templates
+
+The template variable tells \e qmake what sort of makefile should be
+generated for the application. The following choices are available:
+
+\list
+\i app - Creates a makefile that builds an application. This is the
+default, so if a template is not specified, this is used.
+\i lib - Creates a makefile that builds a library.
+\i vcapp - Creates a Visual Studio Project file which builds an application.
+\i vclib - Creates a Visual Studio Project file which builds a library.
+\i subdirs - This is a special template which creates a makefile which
+will go into the specified directories and create a makefile for the
+project file and call make on it.
+\endlist
+
+\section3 The 'app' template
+
+The 'app' template tells \e qmake to generate a makefile that will build
+an application. When using this template the following \e qmake
+system variables are recognized. You should use these in your .pro
+file to specify information about your application.
+
+\list
+\i HEADERS - A list of all the header files for the application.
+\i SOURCES - A list of all the source files for the application.
+\i FORMS - A list of all the .ui files (created using \e{Qt Designer})
+for the application.
+\i LEXSOURCES - A list of all the lex source files for the application.
+\i YACCSOURCES - A list of all the yacc source files for the application.
+\i TARGET - Name of the executable for the application. This defaults
+to the name of the project file. (The extension, if any, is added
+automatically).
+\i DESTDIR - The directory in which the target executable is placed.
+\i DEFINES - A list of any additional pre-processor defines needed for the application.
+\i INCLUDEPATH - A list of any additional include paths needed for the application.
+\i DEPENDPATH - The dependency search path for the application.
+\i VPATH - The search path to find supplied files.
+\i DEF_FILE - Windows only: A .def file to be linked against for the application.
+\i RC_FILE - Windows only: A resource file for the application.
+\i 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 instance, if you don't have any extra INCLUDEPATHs then you don't
+need to specify any, \e qmake will add in the default ones needed.
+For instance, an example project file might look like this:
+
+\code
+TEMPLATE = app
+DESTDIR = c:\helloapp
+HEADERS += hello.h
+SOURCES += hello.cpp
+SOURCES += main.cpp
+DEFINES += QT_DLL
+CONFIG += qt warn_on release
+\endcode
+
+For items that are single valued, e.g. 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 item's
+value with the new value, for example if we wrote \c{DEFINES=QT_DLL},
+all other definitions would be deleted.
+
+\section3 The 'lib' template
+
+The 'lib' template tells \e qmake to generate a makefile that will
+build a library. When using this template, in addition to the system variables
+mentioned above for the 'app' template the \e VERSION variable is
+supported. You should use these in your .pro file to specify
+information about the library.
+
+\list
+\i VERSION - The version number of the target library, for example, 2.3.1.
+\endlist
+
+\section3 The 'subdirs' template
+
+The 'subdirs' template tells qmake to generate a makefile that will go
+into the specified subdirectories and generate a makefile for the
+project file in the directory and call make on it.
+
+The only system variable that is recognised for this template is the
+\e SUBDIRS variable. This variable contains a list of all the
+subdirectories that contain project files to be processed. It is
+essential that the project file in the sub directory has the same name
+as the subdirectory, so that \e qmake can find it. For
+example, if the subdirectory is called 'myapp' then the project file
+in that directory should be called \e myapp.pro in that directory.
+
+\section2 The CONFIG variable
+
+The config variable specifies the options that the compiler should use
+and the libraries that should be linked against. Anything can be
+added to the config variable, but the options covered below are
+recognised by qmake internally.
+
+The following options control what compiler flags are used:
+
+\list
+\i release - The application is to be built in release mode. This is ignored if 'debug' is specified.
+\i debug - The application is to be built in debug mode.
+\i warn_on - The compiler should output as many warnings as possible. This is ignored if 'warn_off' is specified.
+\i warn_off - The compiler should output as few warnings as possible.
+\endlist
+
+The following options define the type of library/application to be built:
+
+\list
+\i qt - The application is a Qt application and should link against the Qt library.
+\i thread - The application is a multi-threaded application.
+\i x11 - The application is an X11 application or library.
+\i windows - 'app' template only: the application is a Windows window application.
+\i console - 'app' template only: the application is a Windows console application.
+\i dll - 'lib' template only: The library is a shared library (dll).
+\i staticlib - 'lib' template only: The library is a static library.
+\i plugin - 'lib' template only: The library is a plugin; this enables the dll option.
+\endlist
+
+For example, if your application uses the Qt library and you want to
+build it as a debuggable multi-threaded application, your project file
+will have the following line:
+
+\code
+ CONFIG += qt thread debug
+\endcode
+
+Note, that you must use "+=", not "=", or \e qmake will not be able to
+use the settings used to build Qt as a guide as what type of Qt
+library was built.
+