📄 tmake_ref.html
字号:
<!doctype HTML public "-//W3C//DTD HTML 3.2//EN"><html><head><title>Reference Manual - tmake</title></head><body bgcolor="#ffffff"><p><h1 align=center>Reference Manual - tmake</h1><hr><h2>Project Variable Reference</h2><h4><a name="ALL_DEPS"></a>ALL_DEPS</h4>Specifies additional dependencies for the makefile target "all:".<p><h4><a name="CLEAN_FILES"></a>CLEAN_FILES</h4>Specifies additional files to be removed for "make clean".<p>Example:<pre> CLEAN_FILES = core *~</pre><h4><a name="CONFIG"></a>CONFIG</h4>Sets the make configuration. It tells the tmake templates what compileroptions to use and which extra libraries to link in.<p>These options control the compilation flags:<p><table border="0"> <tr> <td> </td> <td>release</td> <td> </td> <td>Compile with optimization enabled, ignored if "debug" is specified.</td> </tr> <tr> <td> </td> <td>debug</td> <td> </td> <td>Compile with debug options enabled.</td> </tr> <tr> <td> </td> <td>warn_on</td> <td> </td> <td>The compiler should emit more warnings than normally, ignored if "warn_off" is specified.</td> </tr> <tr> <td> </td> <td>warn_off</td> <td> </td> <td>The compiler should emit no warnings or as few as possible.</td> </tr></table><p>These options defines the application/library type:<p><table border="0"> <tr> <td> </td> <td>qt</td> <td> </td> <td>The target is a Qt application/library and requires Qt header files/library.</td> </tr> <tr> <td> </td> <td>opengl</td> <td> </td> <td>The target requires the OpenGL (or Mesa) headers/libraries.</td> </tr> <tr> <td> </td> <td>x11</td> <td> </td> <td>The target is a X11 application (app.t only).</td> </tr> <tr> <td> </td> <td>windows</td> <td> </td> <td>The target is a Win32 window application (app.t only).</td> </tr> <tr> <td> </td> <td>console</td> <td> </td> <td>The target is a Win32 console application (app.t only).</td> </tr> <tr> <td> </td> <td>dll</td> <td> </td> <td>The target is a shared object/DLL (app.t only).</td> </tr> <tr> <td> </td> <td>staticlib</td> <td> </td> <td>The target is a static library (lib.t only).</td> </tr> <tr> <td> </td> <td>thread</td> <td> </td> <td>The target is a multi-threaded application/library.</td> </tr></table><h4><a name="DEFINES"></a>DEFINES</h4>Specifies C/C++ macros (-D compiler option). On Windows you needto let DEFINES contain "QT_DLL" if you are building a Qt programwhich should link with the Qt DLL.<h4><a name="DEF_FILE"></a>DEF_FILE</h4>Win32/app.t only: Specifies a .def file.<h4><a name="DESTDIR"></a>DESTDIR</h4>Specifies where to put the target file.Example:<pre> DESTDIR = ../../lib</pre>You must create this directory before running make.<h4><a name="DISTFILES"></a>DISTFILES</h4>Adds other files to the distribution archive ("dist target").The source files and project file are always included in thedistribution archive.Example:<pre> DISTFILES = CHANGES README</pre><h4><a name="HEADERS"></a>HEADERS</h4>Defines the header files of the project.<h4><a name="INCPATH"></a>INCPATH</h4>This variable is generated from <code>INCLUDEPATH</code>. The ';' or ':'separators have been replaced by ' ' (single space). This makes iteasier to split. qtapp.t and other templates expand<code>INCPATH</code> to set -I options for the C++ compiler.<h4><a name="INCLUDEPATH"></a>INCLUDEPATH</h4>This variable specifies the #include directories. It can be set in theproject file, or by the <a href="#AddIncludePath">AddIncludePath()</a>function.<p>Example:<pre> INCLUDEPATH = c:\msdev\include d:\stl\include</pre>Use ';' or space as the directory separator.<h4><a name="LIBS"></a>LIBS</h4>Defines additional libraries to be linked in when creating an applicationor a shared library. You probably want to use a platform qualifier sincelibraries are specified differently on Unix and Win32.<p>Example:<pre> unix:LIBS = -lXext -lm win32:LIBS = ole32.lib</pre><h4><a name="MOC_DIR"></a>MOC_DIR</h4>Specifies where to put the temporary moc output files. By default theyare stored in the directory where the moc input files are.<p>Example:<pre> MOC_DIR = tmp</pre>You must create this directory before running make.<p>See also: <a href="#OBJECTS_DIR">OBJECTS_DIR</a>.<h4><a name="OBJECTS"></a>OBJECTS</h4>This varialble is generated from <code>SOURCES</code> by the StdInit() function.The extension of each source file has been replaced by .o (Unix) or .obj(Win32).<p>Example:<pre> SOURCES = a.x b.y</pre>Then <code>OBJECTS</code> become "a.o b.o" on Unix and "a.obj b.obj" onWin32.<h4><a name="OBJECTS_DIR"></a>OBJECTS_DIR</h4>Specifies where to put object files. By default they are stored inthe directory where the source files are.<p>Example:<pre> OBJECTS_DIR = tmp</pre>You must create this directory before running make.<p>See also: <a href="#MOC_DIR">MOC_DIR</a>.<h4><a name="OBJMOC"></a>OBJMOC</h4>This variable is generated by the <a href="#StdInit">StdInit()</a> function if<code>$moc_aware</code> is true. <code>OBJMOC</code> contains the name ofall intermediate moc object files.<p>Example:<pre> HEADERS = demo.h SOURCES = demo.cpp main.cpp</pre>If <tt>demo.h</tt> and <tt>main.cpp</tt> define classes that use signalsand slots (i.e. the <code>Q_OBJECT</code> "keyword" is found in these twofiles), <code>OBJMOC</code> becomes:<pre> OBJMOC = moc_demo.obj</pre>See also: <a href="#SRCMOC">SRCMOC</a>.<h4><a name="PROJECT"></a>PROJECT</h4>This is the name of the project. It defaults to the name of the projectfile, excluding the .pro extension.<h4><a name="RC_FILE"></a>RC_FILE</h4>Win32/app.t only: Specifies a .rc file. Cannot be used with the RES_FILEvariable.<h4><a name="RES_FILE"></a>RES_FILE</h4>Win32/app.t only: Specifies a .res file. You can either specify a.rc file or one or more .res files.<h4><a name="SOURCES"></a>SOURCES</h4>Defines the source files of the project.<h4><a name="SRCMOC"></a>SRCMOC</h4>This variable is generated by the <a href="#StdInit">StdInit()</a> function if<code>CONFIG</code> contains "qt". <code>SRCMOC</code> contains the name ofall intermediate moc files.<p>Example:<pre> HEADERS = demo.h SOURCES = demo.cpp main.cpp</pre>If <tt>demo.h</tt> and <tt>main.cpp</tt> define classes that use signalsand slots (i.e. the <code>Q_OBJECT</code> "keyword" is found in these twofiles), <code>SRCMOC</code> becomes:<pre> SRCMOC = moc_demo.cpp main.moc</pre>See also: <a href="#OBJMOC">OBJMOC</a>.<h4><a name="TARGET"></a>TARGET</h4>Sets the makefile target, i.e. what program to build.<h4><a name="TEMPLATE"></a>TEMPLATE</h4>Sets the default template. This can be overridden by the tmake -t<a href="tmake.html#usage">option</a>.<h4><a name="TMAKE_CC"></a>TMAKE_CC</h4>Contains the name of the compiler.<h4><a name="TMAKE_CFLAGS"></a>TMAKE_CFLAGS</h4>Contains the default compiler flags.<h4><a name="TMAKE_FILEVARS"></a>TMAKE_FILEVARS</h4>Tells tmake which variables contain file names. This is because tmakeon Windows replace the directory separator / with \.<hr><h2>Function Reference</h2>This section contains a brief description of some importanttmake functions used by the templates.<h3><a name="AddIncludePath"></a>AddIncludePath(path)</h3>Adds <em>path</em> to the include path variable,<a href="#INCLUDEPATH">INCLUDEPATH</a>. The include path is usedfor two purposes:<ol><li>Searching files when generating include dependencies.<li>Setting -I options for the C/C++ compiler.</ol><p>Example:<pre> #$ AddIncludePath('$QTDIR/include;/local/include');</pre><h3>BuildMocObj(objects,sources)</h3>Creates build rules for moc source files. Generatesinclude dependencies.<p>Example:<pre> #$ BuildMocObj($project{"OBJMOC"},$project{"SRCMOC"});</pre>Output:<pre> moc_hello.o: moc_hello.cpp \ hello.h \ ...</pre><h3>BuildMocSrc(files)</h3>Creates moc source files from C++ files containing classes thatdefine signals and slots. For a header file <tt>x.h</tt>, thegenerated moc file is called <tt>moc_x.h</tt>. For a source file<tt>y.cpp</tt>, the generates moc file is called <tt>y.moc</tt> andshould be #include'd by <tt>y.cpp</tt>.<p>Example:<pre> #$ BuildMocSrc($project{"HEADERS"}); #$ BuildMocSrc($project{"SOURCES"});</pre>Output:<pre> moc_hello.cpp: hello.h $(MOC) hello.h -o moc_hello.cpp</pre><h3>BuildObj(objects,sources)</h3>Creates build rules for source files. Generatesinclude dependencies.<p>Example:<pre> #$ BuildObj($project{"OBJECTS"},$project{"SOURCES"});</pre>Output:<pre> hello.o: hello.cpp \ hello.h \ ... main.o: main.cpp \ hello.h \ ...</pre><h3>Config(string)</h3>Returns true if the <code>CONFIG</code> variable contains the given string.<p>Example:<pre> #$ if ( Config("release") { }</pre><h3>DisableOutput()</h3>Call this function to force tmake to generate no output untilEnableOutput() is called.<p>Example:<pre> #$ Config("debug") && DisableOutput(); Anything here is skipped if CONFIG contains "debug". #$ Config("debug") && EnableOutput();</pre><h3>EnableOutput()</h3>Enables tmake output after DisableOutput() was called.<h3>Expand(var)</h3>Expands a project variable. Equivalent to <code>$text = $project{$var}</code>.<p>Example:<pre> VERSION = #$ Expand("VERSION");</pre>Output:<pre> VERSION = 1.1</pre><h3>ExpandGlue(var,prepend,glue,append)</h3>Expands a $project{} variable, splits on whitespaceand joins with $glue. $prepend is put at the startof the string and $append is put at the end of thestring. The resulting string ($text) becomes "" ifthe project variable is empty or not defined.<p>Example:<pre> clear: #$ ExpandGlue("OBJECTS","-del","\n\t-del ","");</pre>Output (Windows NT):<pre> clear: -del hello.obj -del main.obj</pre><h3>ExpandList(var)</h3>This function is suitable for expanding lists of files.Equivalent with <code>ExpandGlue($var,""," \\\n\t\t","")</code>.<p>Example:<pre> OBJECTS = #$ ExpandList("OBJECTS");</pre>Output:<pre> OBJECTS = hello.o \ main.o</pre><h3>ExpandPath(var,prepend,glue,append)</h3>Similar to ExpandGlue, except that it splits the items on a semicoloninstead of space (if the variable contains at least one semicolon).<h3>IncludeTemplate(file)</h3>Includes a template file. The ".t" extension is optional.<p>Example:<pre> #$ IncludeTemplate("mytemplate");</pre><h3>Now()</h3>Sets $text to the current date and time.<p>Example:<pre> # Generated at #$ Now()</pre>Output:<pre> # Generated at 12:58, 1996/11/19</pre><h3>Project(strings)</h3>This is a powerful function for setting and reading projectvariables. Returns the resulting project variables (joined with spacebetween).<p>Examples:<pre># Get a project variable: $s = Project("TEMPLATE"); -> $s = "TEMPLATE"# Set a project variable: Project("TEMPLATE = lib"); -> TEMPLATE = lib Project("CONFIG =";) -> CONFIG empty# Append to a project variable: Project("CONFIG = qt"); -> CONFIG = qt Project("CONFIG += debug"); -> CONFIG = qt debug# Append to a project variable if it does not contain the value already: Project("CONFIG = qt release"); -> CONFIG = qt release Project("CONFIG *= qt"); -> CONFIG = qt release Project("CONFIG *= opengl"); -> CONFIG = qt release opengl# Subtract from a project variable: Project("THINGS = abc xyz"); -> THINGS = abc xyz Project("THINGS -= abc"); -> THINGS = xyz# Search/replace on a project variable: Project("CONFIG = tq opengl"); -> CONFIG = tq opengl Project("CONFIG /= s/tq/qt/"); -> CONFIG = qt opengl# The operations can be performed on several project variables at a time. Project("TEMPLATE = app", "CONFIG *= opengl", "THINGS += klm");</pre><h3><a name="ScanProject"></a>ScanProject(file)</h3>Scans a project file and stores the project variables and values in theglobal associative <code>%project</code> array.<h3><a name="StdInit"></a>StdInit()</h3>Standard initialization of tmake. StdInit() should becalled from one of the first lines in the template.<p>This function creates some new project variables:<ul><li><code><a href="#OBJECTS">OBJECTS</a></code> - Object files corresponding to <code><a href="#SOURCES">SOURCES</a></code>.<li><code><a href="#SRCMOC">SRCMOC</a></code> - moc source files.<li><code><a href="#OBJMOC">OBJMOC</a></code> - moc object files.</ul>The moc-related variables are created only if <code>CONFIG</code> contains "qt"<h3>Substitute(string)</h3>This function takes a string and substitutes any occurrence of $$varwith the actual content of the variable. Returns the substituted string.Also sets $text.<p>Important: Use single quotes around the string, otherwise perl will expandany $vars it finds.<p>Example:<pre> Substitute('Project name: $$PROJECT, uses template $$TEMPLATE');</pre>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -