Orb/Doxygen/tmake/doc/tmake_ref.html
changeset 3 d8fccb2cd802
parent 0 42188c7ea2d9
equal deleted inserted replaced
2:932c358ece3e 3:d8fccb2cd802
       
     1 <!doctype HTML public "-//W3C//DTD HTML 3.2//EN">
       
     2 <html><head><title>
       
     3 Reference Manual - tmake
       
     4 </title></head><body bgcolor="#ffffff">
       
     5 <p><h1 align=center>Reference Manual - tmake</h1>
       
     6 
       
     7 <hr>
       
     8 <h2>Project Variable Reference</h2>
       
     9 
       
    10 <h4><a name="ALL_DEPS"></a>ALL_DEPS</h4>
       
    11 Specifies additional dependencies for the makefile target "all:".<p>
       
    12 
       
    13 
       
    14 <h4><a name="CLEAN_FILES"></a>CLEAN_FILES</h4>
       
    15 Specifies additional files to be removed for "make clean".<p>
       
    16 Example:<pre>
       
    17   CLEAN_FILES = core *~
       
    18 </pre>
       
    19 
       
    20 
       
    21 <h4><a name="CONFIG"></a>CONFIG</h4>
       
    22 Sets the make configuration.  It tells the tmake templates what compiler
       
    23 options to use and which extra libraries to link in.<p>
       
    24 These options control the compilation flags:
       
    25 <p>
       
    26 <table border="0">
       
    27   <tr>
       
    28     <td>&nbsp;</td>
       
    29     <td>release</td>
       
    30     <td>&nbsp;</td>
       
    31     <td>Compile with optimization enabled, ignored if
       
    32     "debug" is specified.</td>
       
    33   </tr>
       
    34   <tr>
       
    35     <td>&nbsp;</td>
       
    36     <td>debug</td>
       
    37     <td>&nbsp;</td>
       
    38     <td>Compile with debug options enabled.</td>
       
    39   </tr>
       
    40   <tr>
       
    41     <td>&nbsp;</td>
       
    42     <td>warn_on</td>
       
    43     <td>&nbsp;</td>
       
    44     <td>The compiler should emit more warnings than normally, ignored if
       
    45      "warn_off" is specified.</td>
       
    46   </tr>
       
    47   <tr>
       
    48     <td>&nbsp;</td>
       
    49     <td>warn_off</td>
       
    50     <td>&nbsp;</td>
       
    51     <td>The compiler should emit no warnings or as few as possible.</td>
       
    52   </tr>
       
    53 </table>
       
    54 
       
    55 <p>
       
    56 These options defines the application/library type:
       
    57 <p>
       
    58 <table border="0">
       
    59   <tr>
       
    60     <td>&nbsp;</td>
       
    61     <td>qt</td>
       
    62     <td>&nbsp;</td>
       
    63     <td>The target is a Qt application/library and requires Qt header
       
    64      files/library.</td>
       
    65   </tr>
       
    66   <tr>
       
    67     <td>&nbsp;</td>
       
    68     <td>opengl</td>
       
    69     <td>&nbsp;</td>
       
    70     <td>The target requires the OpenGL (or Mesa) headers/libraries.</td>
       
    71   </tr>
       
    72   <tr>
       
    73     <td>&nbsp;</td>
       
    74     <td>x11</td>
       
    75     <td>&nbsp;</td>
       
    76     <td>The target is a X11 application (app.t only).</td>
       
    77   </tr>
       
    78   <tr>
       
    79     <td>&nbsp;</td>
       
    80     <td>windows</td>
       
    81     <td>&nbsp;</td>
       
    82     <td>The target is a Win32 window application (app.t only).</td>
       
    83   </tr>
       
    84   <tr>
       
    85     <td>&nbsp;</td>
       
    86     <td>console</td>
       
    87     <td>&nbsp;</td>
       
    88     <td>The target is a Win32 console application (app.t only).</td>
       
    89   </tr>
       
    90   <tr>
       
    91     <td>&nbsp;</td>
       
    92     <td>dll</td>
       
    93     <td>&nbsp;</td>
       
    94     <td>The target is a shared object/DLL (app.t only).</td>
       
    95   </tr>
       
    96   <tr>
       
    97     <td>&nbsp;</td>
       
    98     <td>staticlib</td>
       
    99     <td>&nbsp;</td>
       
   100     <td>The target is a static library (lib.t only).</td>
       
   101   </tr>
       
   102 </table>
       
   103 
       
   104 
       
   105 <h4><a name="DEFINES"></a>DEFINES</h4>
       
   106 Specifies C/C++ macros (-D compiler option). On Windows you need
       
   107 to let DEFINES contain "QT_DLL" if you are building a Qt program
       
   108 which should link with the Qt DLL.
       
   109 
       
   110 
       
   111 <h4><a name="DEF_FILE"></a>DEF_FILE</h4>
       
   112 Win32/app.t only: Specifies a .def file.
       
   113 
       
   114 
       
   115 <h4><a name="DESTDIR"></a>DESTDIR</h4>
       
   116 Specifies where to put the target file.
       
   117 Example:<pre>
       
   118   DESTDIR = ../../lib
       
   119 </pre>
       
   120 You must create this directory before running make.
       
   121 
       
   122 
       
   123 <h4><a name="HEADERS"></a>HEADERS</h4>
       
   124 Defines the header files of the project.
       
   125 
       
   126 
       
   127 <h4><a name="INCPATH"></a>INCPATH</h4>
       
   128 This variable is generated from <code>INCLUDEPATH</code>. The ';' or ':'
       
   129 separators have been replaced by ' ' (single space). This makes it
       
   130 easier to split. qtapp.t and other templates expand
       
   131 <code>INCPATH</code> to set -I options for the C++ compiler.
       
   132 
       
   133 
       
   134 <h4><a name="INCLUDEPATH"></a>INCLUDEPATH</h4>
       
   135 This variable specifies the #include directories. It can be set in the
       
   136 project file, or by the <a href="#AddIncludePath">AddIncludePath()</a>
       
   137 function.<p>
       
   138 Example:<pre>
       
   139   INCLUDEPATH = c:\msdev\include d:\stl\include
       
   140 </pre>
       
   141 Use ';' or space as the directory separator.
       
   142 
       
   143 
       
   144 <h4><a name="LIBS"></a>LIBS</h4>
       
   145 Defines additional libraries to be linked in when creating an application
       
   146 or a shared library.  You probably want to use a platform qualifier since
       
   147 libraries are specified differently on Unix and Win32.<p>
       
   148 Example:<pre>
       
   149   unix:LIBS  = -lXext -lm
       
   150   win32:LIBS = ole32.lib
       
   151 </pre>
       
   152 
       
   153 
       
   154 <h4><a name="MOC_DIR"></a>MOC_DIR</h4>
       
   155 Specifies where to put the temporary moc output files.  By default they
       
   156 are stored in the directory where the moc input files are.
       
   157 <p>
       
   158 Example:<pre>
       
   159   MOC_DIR = tmp
       
   160 </pre>
       
   161 You must create this directory before running make.
       
   162 <p>
       
   163 See also: <a href="#OBJECTS_DIR">OBJECTS_DIR</a>.
       
   164 
       
   165 
       
   166 <h4><a name="OBJECTS"></a>OBJECTS</h4>
       
   167 This varialble is generated from <code>SOURCES</code> by the StdInit() function.
       
   168 The extension of each source file has been replaced by .o (Unix) or .obj
       
   169 (Win32).<p>
       
   170 Example:<pre>
       
   171   SOURCES = a.x b.y
       
   172 </pre>
       
   173 Then <code>OBJECTS</code> become "a.o b.o" on Unix and "a.obj b.obj" on
       
   174 Win32.
       
   175 
       
   176 
       
   177 <h4><a name="OBJECTS_DIR"></a>OBJECTS_DIR</h4>
       
   178 Specifies where to put object files.  By default they are stored in
       
   179 the directory where the source files are.<p>
       
   180 Example:<pre>
       
   181   OBJECTS_DIR = tmp
       
   182 </pre>
       
   183 You must create this directory before running make.
       
   184 <p>
       
   185 See also: <a href="#MOC_DIR">MOC_DIR</a>.
       
   186 
       
   187 
       
   188 <h4><a name="OBJMOC"></a>OBJMOC</h4>
       
   189 This variable is generated by the <a href="#StdInit">StdInit()</a> function if
       
   190 <code>$moc_aware</code> is true. <code>OBJMOC</code> contains the name of
       
   191 all intermediate moc object files.<p>
       
   192 Example:<pre>
       
   193   HEADERS = demo.h
       
   194   SOURCES = demo.cpp main.cpp
       
   195 </pre>
       
   196 If <tt>demo.h</tt> and <tt>main.cpp</tt> define classes that use signals
       
   197 and slots (i.e. the <code>Q_OBJECT</code> "keyword" is found in these two
       
   198 files), <code>OBJMOC</code> becomes:<pre>
       
   199   OBJMOC  = moc_demo.obj
       
   200 </pre>
       
   201 See also: <a href="#SRCMOC">SRCMOC</a>.
       
   202 
       
   203 
       
   204 <h4><a name="PROJECT"></a>PROJECT</h4>
       
   205 This is the name of the project.  It defaults to the name of the project
       
   206 file, excluding the .pro extension.
       
   207 
       
   208 
       
   209 <h4><a name="RC_FILE"></a>RC_FILE</h4>
       
   210 Win32/app.t only: Specifies a .rc file.  Cannot be used with the RES_FILE
       
   211 variable.
       
   212 
       
   213 
       
   214 <h4><a name="RES_FILE"></a>RES_FILE</h4>
       
   215 Win32/app.t only: Specifies a .res file.  You can either specify a
       
   216 .rc file or one or more .res files.
       
   217 
       
   218 
       
   219 <h4><a name="SOURCES"></a>SOURCES</h4>
       
   220 Defines the source files of the project.
       
   221 
       
   222 
       
   223 <h4><a name="SRCMOC"></a>SRCMOC</h4>
       
   224 This variable is generated by the <a href="#StdInit">StdInit()</a> function if
       
   225 <code>CONFIG</code> contains "qt". <code>SRCMOC</code> contains the name of
       
   226 all intermediate moc files.<p>
       
   227 Example:<pre>
       
   228   HEADERS = demo.h
       
   229   SOURCES = demo.cpp main.cpp
       
   230 </pre>
       
   231 If <tt>demo.h</tt> and <tt>main.cpp</tt> define classes that use signals
       
   232 and slots (i.e. the <code>Q_OBJECT</code> "keyword" is found in these two
       
   233 files), <code>SRCMOC</code> becomes:<pre>
       
   234   SRCMOC  = moc_demo.cpp main.moc
       
   235 </pre>
       
   236 See also: <a href="#OBJMOC">OBJMOC</a>.
       
   237 
       
   238 
       
   239 <h4><a name="TARGET"></a>TARGET</h4>
       
   240 Sets the makefile target, i.e. what program to build.
       
   241 
       
   242 
       
   243 <h4><a name="TEMPLATE"></a>TEMPLATE</h4>
       
   244 Sets the default template. This can be overridden by the tmake -t
       
   245 <a href="tmake.html#usage">option</a>.
       
   246 
       
   247 
       
   248 <h4><a name="TMAKE_CC"></a>TMAKE_CC</h4>
       
   249 Contains the name of the compiler.
       
   250 
       
   251 
       
   252 <h4><a name="TMAKE_CFLAGS"></a>TMAKE_CFLAGS</h4>
       
   253 Contains the default compiler flags.
       
   254 
       
   255 
       
   256 <h4><a name="TMAKE_FILEVARS"></a>TMAKE_FILEVARS</h4>
       
   257 Tells tmake which variables contain file names.  This is because tmake
       
   258 on Windows replace the directory separator / with \.
       
   259 
       
   260 
       
   261 <hr>
       
   262 <h2>Function Reference</h2>
       
   263 This section contains a brief description of some important
       
   264 tmake functions used by the templates.
       
   265 
       
   266 
       
   267 <h3><a name="AddIncludePath"></a>AddIncludePath(path)</h3>
       
   268 Adds <em>path</em> to the include path variable,
       
   269 <a href="#INCLUDEPATH">INCLUDEPATH</a>. The include path is used
       
   270 for two purposes:<ol>
       
   271 <li>Searching files when generating include dependencies.
       
   272 <li>Setting -I options for the C/C++ compiler.
       
   273 </ol>
       
   274 <p>
       
   275 Example:<pre>
       
   276   #$ AddIncludePath('$QTDIR/include;/local/include');
       
   277 </pre>
       
   278 
       
   279 
       
   280 <h3>BuildMocObj(objects,sources)</h3>
       
   281 Creates build rules for moc source files. Generates
       
   282 include dependencies.<p>
       
   283 Example:<pre>
       
   284   #$ BuildMocObj($project{"OBJMOC"},$project{"SRCMOC"});
       
   285 </pre>Output:<pre>
       
   286   moc_hello.o: moc_hello.cpp \
       
   287 		hello.h \
       
   288 		...
       
   289 </pre>
       
   290 
       
   291 <h3>BuildMocSrc(files)</h3>
       
   292 Creates moc source files from C++ files containing classes that
       
   293 define signals and slots. For a header file <tt>x.h</tt>, the
       
   294 generated moc file is called <tt>moc_x.h</tt>. For a source file
       
   295 <tt>y.cpp</tt>, the generates moc file is called <tt>y.moc</tt> and
       
   296 should be #include'd by <tt>y.cpp</tt>.<p>
       
   297 Example:<pre>
       
   298   #$ BuildMocSrc($project{"HEADERS"});
       
   299   #$ BuildMocSrc($project{"SOURCES"});
       
   300 </pre>Output:<pre>
       
   301   moc_hello.cpp: hello.h
       
   302 	$(MOC) hello.h -o moc_hello.cpp
       
   303 </pre>
       
   304 
       
   305 
       
   306 <h3>BuildObj(objects,sources)</h3>
       
   307 Creates build rules for source files. Generates
       
   308 include dependencies.<p>
       
   309 Example:<pre>
       
   310   #$ BuildObj($project{"OBJECTS"},$project{"SOURCES"});
       
   311 </pre>Output:<pre>
       
   312   hello.o: hello.cpp \
       
   313 		hello.h \
       
   314 		...
       
   315 
       
   316   main.o: main.cpp \
       
   317 		hello.h \
       
   318 		...
       
   319 </pre>
       
   320 
       
   321 
       
   322 <h3>Config(string)</h3>
       
   323 Returns true if the <code>CONFIG</code> variable contains the given string.
       
   324 <p>Example:<pre>
       
   325   #$ if ( Config("release") { }
       
   326 </pre>
       
   327 
       
   328 
       
   329 <h3>DisableOutput()</h3>
       
   330 Call this function to force tmake to generate no output until
       
   331 EnableOutput() is called.
       
   332 <p>Example:<pre>
       
   333   #$ Config("debug") && DisableOutput();
       
   334       Anything here is skipped if CONFIG contains "debug".
       
   335   #$ Config("debug") && EnableOutput();
       
   336 </pre>
       
   337 
       
   338 
       
   339 <h3>EnableOutput()</h3>
       
   340 Enables tmake output after DisableOutput() was called.
       
   341 
       
   342 
       
   343 <h3>Expand(var)</h3>
       
   344 Expands a project variable. Equivalent to <code>$text = $project{$var}</code>.
       
   345 <p>Example:<pre>
       
   346   VERSION = #$ Expand("VERSION");
       
   347 </pre>Output:<pre>
       
   348   VERSION = 1.1
       
   349 </pre>
       
   350 
       
   351 <h3>ExpandGlue(var,prepend,glue,append)</h3>
       
   352 Expands a $project{} variable, splits on whitespace
       
   353 and joins with $glue. $prepend is put at the start
       
   354 of the string and $append is put at the end of the
       
   355 string. The resulting string ($text) becomes "" if
       
   356 the project variable is empty or not defined.<p>
       
   357 Example:<pre>
       
   358   clear:
       
   359           #$ ExpandGlue("OBJECTS","-del","\n\t-del ","");
       
   360 </pre>Output (Windows NT):<pre>
       
   361   clear:
       
   362           -del hello.obj
       
   363           -del main.obj
       
   364 </pre>
       
   365 
       
   366 
       
   367 <h3>ExpandList(var)</h3>
       
   368 This function is suitable for expanding lists of files.
       
   369 Equivalent with <code>ExpandGlue($var,""," \\\n\t\t","")</code>.<p>
       
   370 Example:<pre>
       
   371   OBJECTS = #$ ExpandList("OBJECTS");
       
   372 </pre>Output:<pre>
       
   373   OBJECTS = hello.o \
       
   374 	    main.o
       
   375 </pre>
       
   376 
       
   377 
       
   378 <h3>ExpandPath(var,prepend,glue,append)</h3>
       
   379 Similar to ExpandGlue, except that it splits the items on a semicolon
       
   380 instead of space (if the variable contains at least one semicolon).
       
   381 
       
   382 
       
   383 <h3>IncludeTemplate(file)</h3>
       
   384 Includes a template file. The ".t" extension is optional.<p>
       
   385 Example:<pre>
       
   386   #$ IncludeTemplate("mytemplate");
       
   387 </pre>
       
   388 
       
   389 
       
   390 <h3>Now()</h3>
       
   391 Sets $text to the current date and time.<p>
       
   392 Example:<pre>
       
   393   # Generated at #$ Now()
       
   394 </pre>Output:<pre>
       
   395   # Generated at 12:58, 1996/11/19
       
   396 </pre>
       
   397 
       
   398 
       
   399 <h3>Project(strings)</h3>
       
   400 This is a powerful function for setting and reading project
       
   401 variables.  Returns the resulting project variables (joined with space
       
   402 between).
       
   403 <p>Examples:<pre>
       
   404 # Get a project variable:
       
   405     $s = Project("TEMPLATE");	    -> $s = "TEMPLATE"
       
   406 
       
   407 # Set a project variable:
       
   408     Project("TEMPLATE = lib");	    -> TEMPLATE = lib
       
   409     Project("CONFIG =";)	    -> CONFIG empty
       
   410 
       
   411 # Append to a project variable:
       
   412     Project("CONFIG = qt");	    -> CONFIG = qt
       
   413     Project("CONFIG += debug");	    -> CONFIG = qt debug
       
   414 
       
   415 # Append to a project variable if it does not contain the value already:
       
   416     Project("CONFIG = qt release"); -> CONFIG = qt release
       
   417     Project("CONFIG *= qt");	    -> CONFIG = qt release
       
   418     Project("CONFIG *= opengl");    -> CONFIG = qt release opengl
       
   419 
       
   420 # Subtract from a project variable:
       
   421     Project("THINGS = abc xyz");    -> THINGS = abc xyz
       
   422     Project("THINGS -= abc");	    -> THINGS = xyz
       
   423 
       
   424 # Search/replace on a project variable:
       
   425     Project("CONFIG = tq opengl");  -> CONFIG = tq opengl
       
   426     Project("CONFIG /= s/tq/qt/");  -> CONFIG = qt opengl
       
   427 
       
   428 # The operations can be performed on several project variables at a time.
       
   429 
       
   430     Project("TEMPLATE = app", "CONFIG *= opengl", "THINGS += klm");
       
   431 </pre>
       
   432 
       
   433 
       
   434 <h3><a name="ScanProject"></a>ScanProject(file)</h3>
       
   435 Scans a project file and stores the project variables and values in the
       
   436 global associative <code>%project</code> array.
       
   437 
       
   438 
       
   439 <h3><a name="StdInit"></a>StdInit()</h3>
       
   440 Standard initialization of tmake. StdInit() should be
       
   441 called from one of the first lines in the template.<p>
       
   442 
       
   443 This function creates some new project variables:<ul>
       
   444 <li><code><a href="#OBJECTS">OBJECTS</a></code>
       
   445     - Object files corresponding to
       
   446    <code><a href="#SOURCES">SOURCES</a></code>.
       
   447 <li><code><a href="#SRCMOC">SRCMOC</a></code> - moc source files.
       
   448 <li><code><a href="#OBJMOC">OBJMOC</a></code> - moc object files.
       
   449 </ul>
       
   450 
       
   451 The moc-related variables are created only if <code>CONFIG</code> contains "qt"
       
   452 
       
   453 
       
   454 <h3>Substitute(string)</h3>
       
   455 This function takes a string and substitutes any occurrence of $$var
       
   456 with the actual content of the variable.  Returns the substituted string.
       
   457 Also sets $text.
       
   458 <p>
       
   459 Important: Use single quotes around the string, otherwise perl will expand
       
   460 any $vars it finds.
       
   461 <p>Example:<pre>
       
   462     Substitute('Project name: $$PROJECT, uses template $$TEMPLATE');
       
   463 </pre>