diff options
Diffstat (limited to 'qmake/book/qmake-tutorial.leaf')
-rw-r--r-- | qmake/book/qmake-tutorial.leaf | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/qmake/book/qmake-tutorial.leaf b/qmake/book/qmake-tutorial.leaf new file mode 100644 index 000000000..5e1645fc0 --- /dev/null +++ b/qmake/book/qmake-tutorial.leaf @@ -0,0 +1,239 @@ +\chapter qmake Tutorial + +\section1 Introduction to the qmake tutorial + +This tutorial teaches you how to use \e qmake. We recommend that +you read the \e qmake user guide after completing this tutorial. + +\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 +\i hello.cpp +\i hello.h +\i main.cpp +\endlist + +You will find these files in \e {qt/qmake/examples/tutorial}. 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 \e hello.pro in \e {qt/qmake/tutorial}. The +first thing you need to do is add the lines that tell \e 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 SOURCES variable. Just start a new line with \e +{SOURCES +=} and put hello.cpp after it. You should have something +like: + +\code + SOURCES += hello.cpp +\endcode + +We repeat this for each source file in the project, until we end up +with: + +\code + SOURCES += hello.cpp + SOURCES += main.cpp +\endcode + +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: + +\code + SOURCES = hello.cpp \ + main.cpp +\endcode + +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 is HEADERS: + +Once you have done this, your project file should look something like +this: +\code + HEADERS += hello.h + SOURCES += hello.cpp + SOURCES += main.cpp +\endcode + +The target name is set automatically; it is the same as the project +file, but with the suffix appropriate to the platform. For example, if +the project file is called 'hello.pro', the target will be 'hello.exe' +on Windows and 'hello' on Unix. If you want to use a different name +you can set it in the project file: +\code + TARGET = helloworld +\endcode + +The final step is to set the \e CONFIG variable. Since this is a Qt +application, we need to put 'qt' on the CONFIG line so that \e qmake +will add the relevant libraries to be linked against and ensure that +build lines for \e moc and \e uic are included in the makefile. + +The finished project file should look like this: +\code + CONFIG += qt + HEADERS += hello.h + SOURCES += hello.cpp + SOURCES += main.cpp +\endcode + +You can now use \e qmake to generate a makefile for your application. +On the command line, in your application directory, type: + +\code + qmake -o Makefile hello.pro +\endcode + +Then type \e make or \e nmake depending on the compiler you use. + +\section1 Making an application debuggable + +The release version of an application doesn't contain any debugging +symbols or other debuggin 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 'debug' to the +CONFIG variable in the project file. + +For example: +\code + CONFIG += qt debug + HEADERS += hello.h + SOURCES += hello.cpp + SOURCES += main.cpp +\endcode + +Use \e qmake as before to generate a makefile and you will be able to +debug your application. + +\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 - \e hellowin.cpp and \e +hellounix.cpp. We can't just add these to the \e SOURCES +variable since this will put 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 \e qmake is run on. + +A simple scope which will add in the platform dependent file for +Windows looks like this: + +\code + win32 { + SOURCES += hellowin.cpp + } +\endcode + +So if \e qmake is run on Windows, it will add \e hellowin.cpp to the +list of source files. If \e qmake is run on any other platform, it +will simply ignore it. Now all that is left to be done is to create a +scope for the unix dependent file. + +When you have done that, your project file should now look +something like this: + +\code + CONFIG += qt debug + HEADERS += hello.h + SOURCES += hello.cpp + SOURCES += main.cpp + win32 { + SOURCES += hellowin.cpp + } + unix { + SOURCES += hellounix.cpp + } +\endcode + +Use \e qmake as before to generate a makefile. + +\section1 Stopping qmake if a file doesn't exist + +You may not want to create a makefile if a certain file doesn't exist. +We can check if a file exists by using the exists() function. We can +stop \e qmake from processing by using the error() function. This +works in the same way as scopes. Simply replace the scope condition +with the function. A check for a main.cpp file looks like this: + +\code + !exists( main.cpp ) { + error( "No main.cpp file found" ) + } +\endcode + +The "!" is used to negate the test, i.e. \c{exists( main.cpp )} is +true if the file exists and \c{!exists( main.cpp )} is true if the +file doesn't exist. + +\code + CONFIG += qt 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" ) + } +\endcode + +Use \e qmake as before to generate a makefile. If you rename \e +main.cpp temporarily, you will see the message and \e qmake will stop +processing. + +\section1 Checking for more than one condition + +Suppose you use Windows and you want to be able to see the qDebug() +statements when you run your application on the command line. Unless +you build your application with the console setting, you won't see the +output. We can easily put \e console on the CONFIG line so that on +Windows the makefile will have this setting. But let's say that we +only want to add the CONFIG line if we are running on Windows \e and when +\e debug is already on the CONFIG line. This retquires using two +nested scopes; just create one scope, then create the other inside +that one. Put the settings to be processed inside the last scope, +like this: + +\code + win32 { + debug { + CONFIG += console + } + } +\endcode + +Nested scopes can be joined together using colons, so the final +project file looks like this: + +\code + CONFIG += qt 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 + } +\endcode + + +That's it! You have now completed the tutorial for \e qmake, and are +ready to write project files for your development projects. |