| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <title>OpenOffice.org - Makefiles description</title> |
| <meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> |
| </head> |
| <body> |
| |
| <h2>Makefiles Description</h2> |
| <p>The <code>dmake</code> tool uses <code>makefile.mk</code>.</p> |
| <p>The following sections describe the general structure of |
| <code>makefile.mk</code> makefiles. </p> |
| <ul> |
| <li><a |
| href="#3.5.2.GeneralStructureofmakefile.mkMakefiles%7Coutline">General |
| Structure of <code>makefile.mk</code> Makefiles</a></li> |
| <li><a |
| href="#3.5.3.GenerationofObjectFilesandLibraries%7Coutline">Generation |
| of Object Files and Libraries</a></li> |
| <li><a |
| href="#3.5.4.GenerationofResourceFiles%7Coutline">Generation |
| of Resource Files</a></li> |
| <li><a |
| href="#3.5.5.GenerationofApplications%7Coutline">Generation |
| of Applications</a></li> |
| <li><a |
| href="#3.5.6.GenerationofSharedLibrariesorDynamicLinkLibraries%7Coutline">Generation |
| of Shared Libraries or Dynamic Link Libraries</a></li> |
| <li><a |
| href="#3.5.7.InternalStructureoftheMakefiles%7Coutline">Internal |
| Structure of the Makefiles</a> |
| <ul> |
| <li><a |
| href="#3.5.7.1.Thesettings.mkfile%7Coutline">The <code>settings.mk</code> |
| file</a></li> |
| <li><a |
| href="#3.5.7.2.Thetarget.mkfile%7Coutline">The <code>target.mk</code> |
| file</a></li> |
| </ul> |
| </li> |
| <li><a |
| href="#3.5.8.SettingAdditionalOptions%7Coutline">Setting |
| Additional Options</a></li> |
| <li><a |
| href="#3.5.9.CreationofAdditionalTargets%7Coutline">Creation |
| of Additional Targets</a> |
| <ul> |
| <li><a |
| href="#3.5.9.1.AddTargetstoall%7Coutline">Add Targets |
| to <code>all</code></a></li> |
| <li><a |
| href="#3.5.9.2.AddingTargetstoaMakefileThatIncludeTargets%7Coutline">Adding |
| Targets to a Makefile That Include Targets</a></li> |
| <li><a |
| href="#3.5.9.3.DeclaringDependenciesBeforeAddingTargets%7Coutline">Declaring |
| Dependencies Before Adding Targets</a></li> |
| </ul> |
| </li> |
| </ul> |
| <h3><a name="3.5.2.GeneralStructureofmakefile.mkMakefiles|outline"></a>General |
| Structure of <code>makefile.mk</code> Makefiles</h3> |
| <p>The general outline of makefiles is as follows: </p> |
| <table border="1" cellspacing="0" cellpadding="5" width="746"> |
| <tbody> |
| <tr> |
| <td valign="top"> |
| <pre> |
| PRJ=.. |
| |
| PRJNAME=SW |
| |
| TARGET=core |
| |
| .include:settings.mk |
| |
| # use the predefined macros |
| |
| .include:target.mk |
| |
| </pre> |
| <br> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <p>The following table describes the macros you use in the general outline |
| of a makefile. </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>General Macros Used in <code>makefile.mk</code></caption><tbody> |
| <tr valign="top"> |
| <th>Macro</th> |
| <th>Functional Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>PRJ</code></td> |
| <td>This macro gives the relative position of the root of the current |
| module.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>PRJNAME</code></td> |
| <td>This macro gives the name of the module. This name must be unique |
| within the tree.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>TARGET</code></td> |
| <td>This macro specifies an identifier for the current directory. This |
| name must be unique within the module, or a filename conflict may occur in |
| the output or the <code>solver</code> tree. </td> |
| </tr> |
| </tbody> |
| </table> |
| <h3><a name="3.5.3.GenerationofObjectFilesandLibraries|outline"></a>Generation |
| of Object Files and Libraries</h3> |
| <p>The following table describes the macros you use to generate object files |
| and libraries. The <var>x</var> in these macros signifies a number between |
| one and nine. This specifies support for up to nine different libraries. |
| </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Macros for Generating Object Files and Libraries</caption><tbody> |
| <tr valign="top"> |
| <th>Macro</th> |
| <th>Functional Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>OBJFILES=$(OBJ)$/file1.obj $(OBJ)$/file.obj <br> |
| SLOFILES=$(SLO)$/file1.obj $(SLO)$/file.obj </code></td> |
| <td>You must set this macro to generate the appropriate object files |
| from the following source files: |
| <ul type="disc"> |
| <li><code>file1.cxx</code></li> |
| <li><code>file2.cxx</code></li> |
| </ul> |
| <p>This macro ensures that the build process creates the object files |
| for the compiler in the <code>obj</code> or <code>slo</code> directory of |
| the output tree. On Linux, Solaris, and Mac OS X, this creates dummy <code>.obj</code> |
| files as well as the <code>.o</code>files in the <code>obj</code> directory. |
| </p> |
| <p>You can use these targets can be used to compile C and C++ sources |
| found in different locations. See the <code>rules.mk</code> file for details. |
| </p> |
| <p>The build process usually creates a library from the object files |
| in the <code>lib</code> subdirectory of the output tree. The name of this |
| library is the value of the <code>$TARGET</code> variable. On Linux, Solaris, |
| and Mac OS X the libraries are dummy libraries containing only the names |
| of the dummy <code>.obj</code>files. </p> |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>LIBTARGET=NO</code></td> |
| <td>Set this macro when you do not want to build a library.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>LIBxTARGET=$(LB)$/name.lib</code></td> |
| <td>You can use several library macros of this form to build libraries |
| that do not consist of all object files in a directory or to merge different |
| libraries. </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>LIBxARCHIV=$(LB)$/libname.a</code></td> |
| <td>Sets up support for static linking of libraries. Linux, Solaris, |
| and Mac OS X support this macro.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>LIBxOBJFILES</code></td> |
| <td>Specifies object files to bind into linked libraries.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>LIBxFILES</code></td> |
| <td>Specifies further files to link into the linked library.</td> |
| </tr> |
| </tbody> |
| </table> |
| <h3><a name="3.5.4.GenerationofResourceFiles|outline"></a>Generation of Resource |
| Files</h3> |
| <p>The following table describes the macros you use to generate resource |
| files. The German language resource files are built by default. To support |
| other locales, the environment variable <code>UPDATER</code> must be set |
| to YES and the corresponding locale environment variable <code>RES_<i>language</i></code> |
| must also be set. </p> |
| <p>The <i>x</i> in these macro names signifies a number between one and nine. |
| This specifies support for up to nine different resource files. </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Macros for Generating Resource Files</caption><tbody> |
| <tr valign="top"> |
| <th>Macro</th> |
| <th>Functional Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>SRCFILES=file1.src file2.src</code></td> |
| <td>You must set up this macro to generate resource files. To create |
| one resource file from these files the <code>$(TARGET).srs</code> file is |
| created in the <code>srs</code> subdirectory of the output tree, for example: |
| <p><code>SRCTARGET = $(SRS)$/$(TARGET).srs</code></p> |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SRSxNAMES</code> and <code>SRSxFILES</code></td> |
| <td>You can use these macros to support the building of several <code>srs</code> |
| files.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>RESLIBxNAME</code> and <code>RESLIBxSRSFILES</code></td> |
| <td>You can use these macros to build resource DLLs.</td> |
| </tr> |
| </tbody> |
| </table> |
| <p>You can also set the <code>give_me_all_languages</code> environment variable |
| to build resource files for languages. However, this builds resource files |
| for <em>all</em> languages.</p> |
| <h3><a name="3.5.5.GenerationofApplications|outline"></a>Generation of Applications</h3> |
| <p>The following table describes the macros you use to generate applications. |
| The <var>x</var> in these macro names signifies a number between one and |
| nine. This specifies support for up to nine different applications. </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Macros Used for Generating Applications</caption><tbody> |
| <tr valign="top"> |
| <th>Macro</th> |
| <th>Functional Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxTARGET</code></td> |
| <td>Indicates the filename of the application. The application is always |
| built in the <code>bin</code> directory of the output tree.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxOBJS</code></td> |
| <td>Indicates object files that link to the application. Do not use |
| this macro to build objects, as it does not recognize dependencies.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxSTDLIBS</code></td> |
| <td>Indicates import libraries that link to the application. These |
| are standard binary libraries, such as <code>.a</code> and <code>.so</code> |
| files.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxLIBS</code></td> |
| <td>Indicates libraries from the same module that link to the application. |
| For UNIX these are simple text lists of object files, rather than normal |
| binary libraries. </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxDEF</code></td> |
| <td>Specifies a definition file, if you use one in linking. For Win32 |
| only.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxDEPN</code></td> |
| <td>Specifies dependencies.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxRES</code></td> |
| <td>Specifies system resources. For Win32 only.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>APPxICON</code></td> |
| <td>Specifies an application icon. For Win32 only.</td> |
| </tr> |
| </tbody> |
| </table> |
| <h3><a |
| name="3.5.6.GenerationofSharedLibrariesorDynamicLinkLibraries|outline"></a>Generation |
| of Shared Libraries or Dynamic Link Libraries</h3> |
| <p>The following table describes the macros you use to generate shared libraries |
| or dynamic link libraries (DLLs). The <var>x</var> in these macro names signifies |
| a number between one and nine. This specifies support for up to nine different |
| shared libraries. </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Macros Used for Generating Shared Libraries or DLLs</caption><tbody> |
| <tr valign="top"> |
| <th>Macro</th> |
| <th>Functional Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxTARGET</code></td> |
| <td>Indicates the filename of the shared library. |
| <p>In Win32, shared libraries are always built as <code>$(shlxtarget).dll</code> |
| and are created in the <code>bin</code> directory of the output tree. </p> |
| <p>In UNIX, shared libraries are built as <code>lib$(shlxtarget).so</code> |
| and are located in the <code>lib</code> directory of the output tree.</p> |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>UPD and DLLPOSTFIX</code></td> |
| <td>Provide platform and release independent names, for example: <code>bla$(UPD)$(DLLPOSTFIX)</code> |
| results in <code>bla599mi.dll</code> for release 599 on Windows NT.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxOBJS</code></td> |
| <td>Specify the object files that are used to create the library.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxSTDLIBS</code></td> |
| <td>Links import libraries.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxLIBS</code></td> |
| <td>Specifies libraries from the same module to put into the shared |
| library. </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxDEF</code></td> |
| <td>Specifies the exported symbols file. For Win32 only.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxDEPN</code></td> |
| <td>Indicates dependencies.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxRES</code></td> |
| <td>System dependent resources use this macro.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>SHLxIMPLIB</code></td> |
| <td>Specifies an import library to create. For Win32 only. </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFxNAME</code></td> |
| <td>Specifies the name of the definition file. This is usually a similar |
| name to the shared library.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFxDEPN</code></td> |
| <td>Indicates definition file dependencies.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFLIBxNAME</code></td> |
| <td>Specifies the library name to parse for symbols. For Win32 only. |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFxDES</code></td> |
| <td>A comment on the definition file.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFxEXPORTyy</code></td> |
| <td>A symbol name. The <i>y</i> in this macro name signifies a number |
| from 1-99.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>DEFxEXPORTFILE</code></td> |
| <td>A file of symbols to export.</td> |
| </tr> |
| </tbody> |
| </table> |
| <p>The following example shows how you can use these macros:</p> |
| <pre> |
| $(MISC)$/$(SHLxTARGET).flt: |
| |
| @echo string >> $@ |
| </pre> |
| <p><b>Note:</b> The new line and indentation are necessary for these lines |
| to work.</p> |
| <p>This command generates a filter file for automatically creating a definition |
| file. The <code>ldump</code> tool parses the library specified in <code>DEFLIBxNAME</code> |
| for symbols, removes all symbols that match the string in the <code>*.flt</code> |
| file, and writes the resulting list into the definition file. </p> |
| <p>You can only do this for Win32. A similar process for Linux, Solaris, |
| and Mac OS X is planned. </p> |
| <h3><a name="3.5.7.InternalStructureoftheMakefiles|outline"></a>Internal |
| Structure of the Makefiles</h3> |
| <p>Each makefile contains an include directive to a <code>settings.mk</code> |
| file, followed by an include directive to a <code>target.mk</code> file. |
| The following sections describe these files. </p> |
| <h4><a name="3.5.7.1.Thesettings.mkfile|outline"></a>The <code>settings.mk</code> |
| file</h4> |
| <p>The file <code>settings.mk</code> sets all the global settings for the |
| makefiles. It sets macros, based on the following: </p> |
| <ul type="disc"> |
| <li>The underlying operating system.</li> |
| <li>The compiler used.</li> |
| <li>The version of the office suite you are building.</li> |
| </ul> |
| <p>For example, it sets the name of the compiler used, linker, or library |
| manager. It can also define the names of libraries, compiler switches, and |
| link switches.</p> |
| <p>In the <code>target.mk</code> file, the standard target is predefined |
| depending on the macros you set. For example, it can contain statements for |
| linking applications, libraries, or resources. Typically, the <code>include</code> |
| directive gets these files from <code>solenv/inc</code>. Typically, the |
| include directive gets these files from solenv/inc.</p> |
| <p>There are other makefiles that specify particular settings that control |
| parts of the build. The following table describes these special settings |
| makefiles. These makefiles are included by either <code>settings.mk</code> |
| or <code>target.mk</code>.</p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Special Settings Files for Makefiles</caption><tbody> |
| <tr valign="top"> |
| <th>Makefiles</th> |
| <th>Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>unitools.mk</code></td> |
| <td>This file defines macros for tools which are available on different |
| platforms, for example: |
| <ul type="disc"> |
| <li>AWK</li> |
| <li>COPY</li> |
| <li>FIND</li> |
| <li>TYPE</li> |
| <li>TOUCH</li> |
| </ul> |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>[upd]minor.mk</code></td> |
| <td>Macros such as <code>BUILD</code> and <code>LAST_MINOR</code> are |
| set in this file.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>libs.mk</code></td> |
| <td>The platform-dependent environment setup for <code>LIBRARIES</code> |
| is stored in this file.</td> |
| </tr> |
| <tr valign="top"> |
| <td><var>platform-name</var><code>.mk <br> |
| (os2.mk, wnt.mk, unx.mk)</code></td> |
| <td>These makefiles specify platform-dependent characteristics, for |
| example: |
| <ul type="disc"> |
| <li>CC</li> |
| <li>LINK</li> |
| <li>LIB</li> |
| <li>FLAGS</li> |
| <li>LINKFLAGS</li> |
| </ul> |
| <p>Other platform-specific makefiles may also exist. For example:</p> |
| <ul type="disc"> |
| <li><code>unxsols2.mk</code></li> |
| <li><code>unxlngi4.mk</code></li> |
| </ul> |
| <p>These files typically contain variables which are used to change |
| the build:</p> |
| <ul> |
| <li><code>CDEFS</code> general compiler defines (C/C++)</li> |
| <li><code>CFLAGS</code> general compiler flags (C/C++)</li> |
| <li><code>CFLAGSCC</code> extra C-only compiler flags</li> |
| <li><code>CFLAGSCXX</code> extra C++ only compiler flags</li> |
| </ul> |
| <p>In addition there are flags enabled for profiling or debug builds:</p> |
| <ul> |
| <li><code>CFLAGSPROF</code></li> |
| <li><code>CFLAGSDEBUG</code> <br> |
| The typical value for Linux, Solaris, and Mac OS X platforms for <code>CFLAGSDEBUG</code> |
| is <code>-g</code>.</li> |
| </ul> |
| <p>There are corresponding linker flags for profiled and debug builds:</p> |
| <ul> |
| <li><code>LINKFLAGSPROF</code></li> |
| <li><code>LINKFLAGSDEBUG</code></li> |
| </ul> |
| <p>There is also support for whether the target is a command-line user |
| interface (CUI) or graphical user interface (GUI), whether it is an object |
| or shared library and whether it is single-threaded (ST) or multi- threaded |
| (MT) by using the following flags:</p> |
| <ul> |
| <li><code>CFLAGSOBJGUIST</code> GUI, object, single-threaded</li> |
| <li><code>CFLAGSOBJCUIST</code> CUI, object, single-threaded</li> |
| <li><code>CFLAGSOBJGUIMT</code> GUI, object, multithreaded</li> |
| <li><code>CFLAGSOBJCUIMT</code> CUI, object, multithreaded</li> |
| <li><code>CFLAGSSLOGUIMT</code> GUI, object, multithreaded</li> |
| </ul> |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td><code>rules.mk</code></td> |
| <td>This files specifies the rules for compiling the following types |
| of file: |
| <ul type="disc"> |
| <li><code>.asm</code></li> |
| <li><code>.c</code></li> |
| <li><code>.cxx</code></li> |
| <li><code>.idl</code></li> |
| <li><code>.dpc</code></li> |
| </ul> |
| <p>There may be many rules to build each type of file. From these rules, |
| existing source files can build targets. </p> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <h4><a name="3.5.7.2.Thetarget.mkfile|outline"></a>The <code>target.mk</code> |
| file</h4> |
| <p>After the include of <code>settings.mk</code>, the next major include |
| is the <code>target.mk</code> file which describes how to build the targets |
| of each platform. The <code>target.mk</code> file is divided into the following |
| parts: </p> |
| <ol> |
| <li>Expansion of the overall targets.</li> |
| <li>Dependency order.</li> |
| <li>Description of the following individual targets: |
| <ul type="disc"> |
| <li><code>_tg_def.mk</code> - the definition files for shared libraries |
| (DLLs).</li> |
| <li><code>_tg_sdi.mk</code> - the target definition for the IDL (<code>svidl</code>) |
| files.</li> |
| <li><code>tg_obj.mk</code> - the building of the library from object |
| files.</li> |
| <li><code>tg_slo.mk</code> - the building of the library from <code>.slo</code> |
| files.</li> |
| <li><code>_tg_lib.mk</code> - the building of the library from any |
| files.</li> |
| <li><code>_tg_srs.mk</code> - the translation of the <code>.src</code> |
| files.</li> |
| <li><code>_tg_res.mk</code> - the translation of the <code>.srs</code> |
| files.</li> |
| <li><code>_tg_rslb.mk</code> - generation of the resource DLLs.</li> |
| <li><code>_tg_shl.mk</code> - generation of the shared libraries.</li> |
| <li><code>tg_jar.mk</code> - generation of the jar files.</li> |
| <li><code>tg_dep.mk</code> - generation of the dependencies.</li> |
| </ul> |
| </li> |
| </ol> |
| <p>The file also includes the descriptions of many further targets such as |
| <code>killobj</code>, <code>killbin</code>, and so on. </p> |
| <h3><a name="3.5.8.SettingAdditionalOptions|outline"></a>Setting Additional |
| Options</h3> |
| <p>You use the macros described in the following table to set additional |
| options. </p> |
| <table border="1" cellspacing="0" cellpadding="5"> |
| <caption>Macros for Setting Special Options</caption><tbody> |
| <tr valign="top"> |
| <th>Makefiles</th> |
| <th>Description</th> |
| </tr> |
| <tr valign="top"> |
| <td><code>ENVCFLAGS</code></td> |
| <td>This macro supports additional compiler options for C.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>ENVCXXFLAGS</code></td> |
| <td>This macro supports additional compiler options for C++.</td> |
| </tr> |
| <tr valign="top"> |
| <td><code>ENVLINKFLAGS</code></td> |
| <td>This macro supports additional linker options.</td> |
| </tr> |
| </tbody> |
| </table> |
| <h3><a name="3.5.9.CreationofAdditionalTargets|outline"></a>Creation of Additional |
| Targets</h3> |
| <p>The following sections describe ways to create additional targets in a |
| makefile. </p> |
| <h4><a name="3.5.9.1.AddTargetstoall|outline"></a>Add Targets to <code>all</code></h4> |
| <p>To build targets other than the default targets that are created by the |
| <code>target.mk</code> file, follow these steps: </p> |
| <ol> |
| <li>Add the targets to the target <code>all</code> as dependencies.</li> |
| <li>End the list of targets with <code>ALLTAR</code>.</li> |
| <li>Make sure <code>target all</code> precedes the include of <code>target.mk</code> |
| in the makefile.</li> |
| </ol> |
| <p>If you write your target in a platform independent form without using |
| any hard-coded pathnames, ensure that your target appears before the <code>.include:target.mk</code> |
| directive. If this works, this is an acceptable way to create an additional |
| target. </p> |
| <h4><a name="3.5.9.2.AddingTargetstoaMakefileThatIncludeTargets|outline"></a>Adding |
| Targets to a Makefile That Include Targets</h4> |
| <p>The typical way to add a target is to add it to an existing <code>makefile.mk</code> |
| that already includes targets. This causes the following problems:</p> |
| <ul> |
| <li>If you place your target before the <code>.include:target.mk</code> |
| directive in the makefile, it disables the global targets.</li> |
| <li>If you place your target after the <code>.include:target.mk</code> |
| directive, <code>dmake</code> does not build the target.</li> |
| <li>If you try to build your target by using the technique in the following |
| sample, you may encounter several other problems. |
| <table border="1" cellspacing="0" cellpadding="5" width="746"> |
| <tbody> |
| <tr> |
| <td valign="top"> |
| <pre> |
| |
| |
| all: \ |
| |
| <var>new-target</var> \<br><br> ALLTAR<br><br></pre> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <p>The first target is always built. When doing an initial build, <code>dmake</code> |
| enters states where no <code>ALLTAR</code>is defined and displays an error |
| message and stops.</p> |
| <p>There is also no guaranteed order of execution of those two targets. |
| It may work most of the time and produce unusual errors on multiprocessor |
| machines.</p> |
| </li> |
| </ul> |
| <h4><a name="3.5.9.3.DeclaringDependenciesBeforeAddingTargets|outline"></a>Declaring |
| Dependencies Before Adding Targets</h4> |
| <p>Define explicit dependencies as follows:</p> |
| <table border="1" cellspacing="0" cellpadding="5" width="746"> |
| <tbody> |
| <tr> |
| <td valign="top"> |
| <pre> |
| |
| |
| #this object depends on generated source |
| |
| $(OBJ)$/myobject.obj : $(MISC)$/myobject.cxx |
| |
| </pre> |
| <br> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <p>Then define the target to generate the source file after this statement. |
| If this object is needed now, there is a dependency on the source file and |
| the target is executed. You must define all the targets and dependencies |
| after the <code>.include:target.mk</code>directive.</p> |
| <p>There is still a potential problem of conflicts with targets added to |
| the global makefiles in the future. If something in the build environment |
| changes and affects your target, it may be difficult to identify the change.</p> |
| <br> |
| </body> |
| </html> |