summaryrefslogtreecommitdiff
path: root/ACE/MPC/docs/html/MakeProjectCreator.html
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/docs/html/MakeProjectCreator.html')
-rw-r--r--ACE/MPC/docs/html/MakeProjectCreator.html7148
1 files changed, 7148 insertions, 0 deletions
diff --git a/ACE/MPC/docs/html/MakeProjectCreator.html b/ACE/MPC/docs/html/MakeProjectCreator.html
new file mode 100644
index 00000000000..802ef252d18
--- /dev/null
+++ b/ACE/MPC/docs/html/MakeProjectCreator.html
@@ -0,0 +1,7148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+ <meta name="generator" content=
+ "HTML Tidy for Linux (vers 1 September 2005), see www.w3.org">
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <meta http-equiv="Content-Style-Type" content="text/css">
+ <meta name="id" content=
+ "$Id$">
+ <link rel="STYLESHEET" href="MakeProjectCreator.css" charset="ISO-8859-1"
+ type="text/css">
+
+ <title>MPC</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+ <div>
+ <h2 class="ChapterNum">&nbsp;</h2>
+ </div>
+
+ <div>
+ <h1 class="Head1">The Makefile, Project, and Workspace Creator (MPC)</h1>
+
+ <div>
+ <h3 class="Head2">Introduction</h3>
+ <hr>
+
+ <ul>
+ <li class="Body">Maintaining multiple build tool files for a
+ multi-platform project can be quite a challenge, especially when the
+ project structure and platforms are constantly changing and evolving.
+ A project may support Makefiles, Visual C++ project files, Borland
+ Makefiles, and many others. Adding files, deleting files, changing
+ project options or even changing the name of the target within your
+ project will require you to expend time updating each build tool
+ file. What you need instead is a single location to store project
+ specific information to avoid repetitious, tedious modifications to
+ multiple build tool files. This is where Makefile Project Creator
+ (MPC) comes into the picture.</li>
+
+ <li class="Body">MPC can be used to generate build tool specific
+ project files from a generic mpc file. The MPC project file is a
+ collection of source files that make up a single build target. MPC
+ uses platform specific input along with mpc files and generates build
+ tool specific files like makefiles, Visual C++ workspace and project
+ files, Visual Studio solution and project files, etc.</li>
+
+ <li class="Body">MPC provides many advantages over the build tool
+ files it replaces. It provides mechanisms for minimizing maintenance
+ of project build files. It does this through support for project
+ inheritance and defaults for all aspects of a project, and the syntax
+ is simple and easy to use and maintain. These and other features will
+ be discussed in detail in the following sections. A complete example
+ of the use of MPC is shown in the <a href=
+ "MakeProjectCreator.html#ExampleMPCFile" class="XRef">Example MPC
+ File</a> section.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h3 class="Head2">Using MPC</h3>
+ <hr>
+
+ <ul>
+ <li class="Body">An MPC project is a set of parameters that describe
+ an individual build target (such as a library or executable). These
+ parameters include the target name, include paths, source files,
+ header files, etc. One or more projects can be defined within a
+ single mpc file. An MPC workspace is just an arbitrary collection of
+ projects.</li>
+
+ <li class="Body">Projects can be generated (without workspaces) by
+ using the mpc.pl script. Multiple mpc files can be passed to this
+ script. If no mpc files are passed to the script, it will search for
+ project-related files (such as source files, header files, etc.) and
+ incorporate them into a default project.</li>
+
+ <li class="Body"><a name="Figure 1-2"></a>This diagram shows a
+ high-level view of project file generation using mpc.pl.</li>
+
+ <li style="list-style: none">
+ <h6 class="FigTitle">Generating projects with mpc.pl</h6>
+
+ <table border="1" summary="Generating projects with mpc.pl">
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+
+ <div>
+ <img src="images/mpc.gif" alt=
+ "Generating projects with mpc.pl">
+ </div>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">To generate workspaces, you must run <em class=
+ "Code">mwc.pl</em>. This script will generate projects from mpc files
+ and create a workspace based on those mpc files. If no mwc files are
+ passed to the script, it will search in the current directory and its
+ subdirectories for all mpc files and incorporate them into a single
+ workspace.</li>
+
+ <li class="Body">For make based project types (make, gnuace, bmake,
+ nmake), a workspace is just a top-level makefile. But, for graphical
+ interfaces such as Visual Studio, a workspace is the top-level file
+ that groups all of the project files together.</li>
+
+ <li class="Body">The following diagram shows a high-level view of
+ workspace file generation using mwc.pl.</li>
+
+ <li style="list-style: none">
+ <h6 class="FigTitle">Generating workspaces with mwc.pl</h6>
+
+ <table border="1" summary="Generating workspaces with mwc.pl">
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+
+ <div>
+ <img src="images/mwc.gif" alt=
+ "Generating workspaces with mwc.pl">
+ </div>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+
+ <div>
+ <h4 class="Head3">Supported Build Tools</h4>
+
+ <ul>
+ <li class="Body">MPC generates workspaces and projects for use with
+ many build tools. This table lists the MPC types (used with
+ mpc&rsquo;s <em class="Code">-type</em> option) and their
+ associated build tools.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">MPC Types</h6>
+
+ <table border="1" summary="MPC Types">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Type</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Build Tool</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">automake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">GNU Automake.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">bcb2007</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Borland C++ Builder 2007.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">bcb2009</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">CodeGear C++ Builder 2009.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">bds4</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Support for Borland Developer Studio 4
+ is incomplete.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">bmake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Borland Make.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">cc</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Code Composer Studio 2.0</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">em3</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">eMbedded Visual C++ 3.00 and 4.00.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">ghs</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Green Hills C++ Builder.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">gnuace</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">GNU Make for ACE/TAO/CIAO only
+ (ACE/TAO/CIAO extension).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">html</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">html pages are generated for
+ visualization of project information.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">make</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Generic make. The makefiles generated
+ by this project type can be used with any version of make.
+ However, due to configuration issues, it should not be used
+ with ACE or TAO.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">nmake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Microsoft NMake.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">sle</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Support for Visual SlickEdit is
+ incomplete.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">vc6</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual C++ 6.0.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">vc7</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio .NET 2002.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">vc71</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio .NET 2003.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class="TableCode">vc8</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2005.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">vc9</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2008.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">vc10</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Visual Studio 2010.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode">wb26</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Wind River Workbench 2.6.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">wix</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Wix toolset for .msi creation.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h4 class="Head3">Command Line</h4>
+
+ <ul>
+ <li class="BodyNoLead">The command line options for the workspace
+ creator (<em class="Code">mwc.pl</em>) and the project creator
+ (<em class="Code">mpc.pl</em>) are exactly the same. The project
+ creator is used to generate one or more separate projects by
+ passing mpc files to it on the command line. The workspace creator
+ is used to generate one or more workspaces and the projects related
+ to those workspaces.</li>
+
+ <li class="Body">The table below describes each option with the
+ more commonly used options in bold and project specific options in
+ italics.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle"><a name=
+ "Command Line Options"></a>Command Line Options</h6>
+
+ <table border="1" summary="Command Line Options">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Option</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-base</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option allows the user to force
+ any project to inherit from a specified base project. This
+ option can be used multiple times to force multiple
+ inheritance upon a project.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-complete</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This hidden option can be used to
+ generate a tcsh <em class="TableCode">complete</em> command
+ that allows a user of the tcsh shell to complete on options
+ as well as file names.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-exclude</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this option is used with <em class=
+ "Code">mwc.pl</em> , the directories or mwc files provided
+ in a comma separated list will be excluded when searching
+ for mpc files. Each element provided for exclusion should
+ be relative to the starting directory. This option has no
+ effect when used with <em class="Code">mpc.pl</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-expand_vars</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option instructs MPC to perform
+ direct replacement of $() variables with the values from
+ the environment (if the <em class="Code">-use_env</em>
+ option is used) or the values specified by the <em class=
+ "Code">-relative</em> option.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-feature_file</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option allows the user to override
+ the default feature file (<em class="Code">MPC/config/</em>
+ <em class="Code">default.features</em> or <em class=
+ "Code">ACE_wrappers/bin/MakeProjectCreator/config/default.features</em>
+ ) which may or may not exist. This file can be used to
+ override feature values specified in the <em class=
+ "Code">global.features</em> file located in the <em class=
+ "Code">config</em> directory. Feature files are described
+ in the <a href="MakeProjectCreator.html#TheFeatureFile"
+ class="XRef">Feature File</a> section.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-features</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies the feature list to set
+ before processing. This is a comma separated list and
+ should contain no spaces.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-for_eclipse</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Allows generated makefiles to be used
+ with Eclipse.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-gendot</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A .dot file, for use with Graphviz,
+ will be created for each workspace processed.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-genins</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option instructs MPC to generate
+ an &ldquo;install&rdquo; file after processing each
+ project. These &ldquo;install&rdquo; files can be used with
+ the prj_install.pl script which will copy portions of the
+ project related files into a user specified location.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-gfeature_file</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies the global feature file. The
+ default global feature file is <em class=
+ "Code">global.features</em> found in the <em class=
+ "Code">config</em> directory.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-global</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option specifies the global input
+ file. Values stored within this base project are applied to
+ all generated projects. The default value is <em class=
+ "Code">ACE_wrappers/bin/MakeProjectCreator/global.mpb or
+ MPC/config/global.mpb</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-hierarchy</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this option is used with <em class=
+ "Code">mwc.pl</em> , it will generate a workspace at each
+ directory between the directory in which it is run and the
+ location of a processed mpc file. This option has no effect
+ when used with <em class="Code">mpc.pl</em> and is the
+ default for &ldquo;make&rdquo; based workspace types.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">-include</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Include search directories are added
+ with this option. These search directories are used when
+ locating base projects, template input files and templates.
+ It can be used multiple times on the same command line.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-into</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option specifies that all
+ generated project files will be placed in a mirrored
+ directory structure.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-language</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option is used to specify which
+ language to assume when generating projects. The default
+ language is <em class="Code">cplusplus</em>, but <em class=
+ "Code">csharp</em>, <em class="Code">java</em> and
+ <em class="Code">vb</em> are also supported.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-make_coexistence</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Make based project types that normally
+ name the workspace <em class="Code">Makefile</em>
+ (<em class="Code">bmake</em> or <em class="Code">nmake</em>
+ ) will name the generated output files such that they can
+ coexist within the same directory. In essence, the
+ <em class="Code">bmake</em> and <em class="Code">nmake</em>
+ workspace names will not be <em class="Code">Makefile</em>,
+ but the name of the workspace followed by the project type
+ (<em class="Code">.bmake</em> or <em class=
+ "Code">.nmake</em> ).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-name_modifier</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option allows the user to modify
+ the output names of projects and workspaces. These are
+ usually determined by either the mpc or mwc file, but can
+ be modified using a pattern replacement. The parameter
+ passed to this option will be used as the pattern and any
+ asterisks (*) found in the pattern will be replaced with
+ the project or workspace name depending on which type of
+ file is being created.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-apply_project</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option is only useful with the
+ <em class="Code">-name_modifier</em> option. When used in
+ conjunction with <em class="Code">-name_modifier</em>, the
+ pattern will be applied to the project name in addition to
+ the project or workspace name.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-nocomments</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Comments will not be placed in the
+ generated workspace files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-noreldefs</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option specifies that the default
+ relative definitions should not be generated. See the
+ <em class="TableCode">-relative</em> option below.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-notoplevel</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option tells <em class=
+ "TableCode">mwc.pl</em> to generate all workspace related
+ project files, but do not generate the associated
+ workspace. This option tells <em class=
+ "TableCode">mpc.pl</em> to process all mpc files passed in,
+ but it will not generate any project files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-recurse</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Search from the current directory for
+ any input files and process them from the directory in
+ which they are located.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">-relative</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Relative paths are used to replace
+ variables enclosed with <em class="TableCode">$()</em>. By
+ default, any environment variable that ends in <em class=
+ "TableCode">_ROOT</em> will be automatically used as a
+ relative path replacement. For more information see
+ <a href="MakeProjectCreator.html#Additional%20-relative%20information"
+ class="XRef">the -relative Option.</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-relative_file</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option allows you to override the
+ default relative definitions file, which is default.rel
+ under the MPC config directory..</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-static</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies that static project files
+ will be generated from the MPC projects. The default is to
+ generate dynamic project files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-template</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option allows a user to specify an
+ alternate template. Each project type has its own template
+ and this option allows a user to override the default
+ template.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-ti</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Each project type has a set of template
+ input files. With this option the default template input
+ file can be overridden for a particular project type. For
+ more information see <a href=
+ "MakeProjectCreator.html#Additional%20-ti%20information"
+ class="XRef">the -ti Option.</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">-type</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option specifies the type of
+ project or workspace to be generated. It can be specified
+ multiple times to generate different project types for a
+ single set of input files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-use_env</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option instructs MPC to replace
+ all <em class="TableCode">$()</em> instances with the
+ corresponding environment variable value instead of using
+ values provided by the -relative option.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-value_project</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Use this option to override an mpc
+ project assignment from the command line. This can be used
+ to introduce new name value pairs to a project. However, it
+ must be a valid project assignment. For more information
+ see <a href=
+ "MakeProjectCreator.html#Additional%20-value_project%20information"
+ class="XRef">the -value_project Option.</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">-value_template</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This option can be used to override
+ existing template input variable values from the command
+ line. It can not be used to introduce new template input
+ name value pairs. For more information see <a href=
+ "MakeProjectCreator.html#Additional%20-value_template%20information"
+ class="XRef">the -value_template Option.</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">-version</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The MPC version is printed and no files
+ are processed.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+
+ <div>
+ <h5 class="Head4">Additional Option Descriptions</h5>
+
+ <ul>
+ <li class="BodyNoLead">Some of the options in <a href=
+ "MakeProjectCreator.html#Command%20Line%20Options" class=
+ "XRef">Command Line Options</a> require an expanded explanation.
+ You will find more information on the <em class=
+ "Code">-relative</em>, <em class="Code">-ti</em>, <em class=
+ "Code">-value_project</em> and <em class=
+ "Code">-value_template</em> options below.</li>
+ </ul>
+
+ <div>
+ <h6 class="Head5"><a name=
+ "Additional -relative information"></a>The -relative Option.</h6>
+
+ <ul>
+ <li class="BodyNoLead">Some project types do not (completely)
+ support the idea of accessing environment variables through the
+ use of <em class="Code">$()</em>, and therefore MPC must ensure
+ that generated projects are usable in these cases. In order to
+ avoid the existence of <em class="Code">$()</em> variables
+ within the generated project files, relative paths are put in
+ place of those (where possible).</li>
+
+ <li class="Body">The <em class="Code">-relative</em> option
+ takes a single parameter of a name value pair, for
+ example:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">mwc.pl -relative
+ PROJ_TOP=/usr/projects/top</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">In above example, if the text <em class=
+ "Code">"$(PROJ_TOP)</em> " is found as a value for any mpb,
+ mpc, mpd, or mpt variable then it is replaced by a path that is
+ relative to <em class="Code">/usr/projects/top</em>. For
+ example, if an mpc file located under <em class=
+ "Code">/usr/projects/top/dir</em> contained the following:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project {</p>
+
+ <p class="Code">&nbsp;&nbsp;includes += $(PROJ_TOP)</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The generated project file would contain text
+ similar to:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">CPPFLAGS += -I..</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The <em class="Code">$(PROJ_TOP)</em> string
+ was replaced with a directory value that is relative to the
+ directory in which the mpc file is located.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="Additional -ti information"></a>
+
+ <h6 class="Head5">The -ti Option.</h6>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">-ti</em> option
+ allows you to identify different template input files based on
+ the type of target being built. Template input files correspond
+ to four different categories: <em class="Code">dll</em>,
+ <em class="Code">lib</em>, <em class="Code">dll_exe</em>, and
+ <em class="Code">lib_exe</em>. Not all project types
+ distinguish between the different categories, but the templates
+ for various project types will be combined with different
+ template input files, depending on the build target type, to
+ generate different output.</li>
+
+ <li class="Body">To override the default template input file
+ names, a <em class="Code">-ti</em> option is provided. The
+ <em class="Code">-ti</em> option takes a single parameter of
+ the form <em class="Code">type:file</em>. The <em class=
+ "Code">type</em> is one of the four categories stated above and
+ the <em class="Code">file</em> is the base name of an mpt file
+ located somewhere in the include search paths.</li>
+
+ <li class="Body">The following example shows a usage of the -ti
+ option. It says that when generating a static project (lib),
+ use the <em class="Code">vc7lib</em> template input file and
+ when generating a dynamic project (dll), use the <em class=
+ "Code">vc7dll</em> template input file:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">mpc.pl -type vc71 -ti lib:vc7dsplib -ti
+ dll:vc7dspdll</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">These happen to be the default values for the
+ <em class="Code">vc71</em> type, but it illustrates that a
+ different template input can be specified for each
+ category.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="Additional -value_project information"></a>
+
+ <h6 class="Head5">The -value_project Option.</h6>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">-value_project</em>
+ option can be useful when the need arises to modify the value
+ of an MPC variable across one or more mpc files. For example,
+ if you wanted to generate all of your projects with an
+ additional include search path you would run the following
+ command:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">mwc.pl -value_project
+ includes+=/include/path</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">In the above example, an additional include
+ search path of <em class="Code">/include/path</em> would be
+ placed in all generated projects.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="Additional -value_template information"></a>
+
+ <h6 class="Head5">The -value_template Option.</h6>
+
+ <ul>
+ <li class="BodyNoLead">This option modifies existing or adds
+ new template input name/value pairs. For example, if you wanted
+ to generate dynamic <em class="Code">vc71</em> projects with
+ only <em class="Code">Release</em> targets, you would run the
+ following command:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">mwc.pl -type vc71 -value_template
+ configurations=Release</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">To find out what template input variables are
+ defined, see the individual mpd file of interest (<em class=
+ "Code">$ACE_ROOT/bin/MakeProjectCreator/templates/*.mpd</em>
+ and <em class="Code">$MPC_ROOT/templates/*.mpd</em> ) and
+ search for names used within <em class="Code">&lt;%</em> and
+ <em class="Code">%&gt;</em> or use the <em class=
+ "Code">document_template.pl</em> script described in the
+ <a href="#Document%20Template%20Script">Template Variable
+ Documentation</a> section. Names that are not listed as project
+ keywords (see <a href="MakeProjectCreator.html#82186" class=
+ "XRef">Assignment Keywords</a>) are template variables.</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">Configuration Files</h4>
+
+ <ul>
+ <li class="BodyNoLead">
+ <h6 class="Head5">Codebase Configuration File</h6>
+ </li>
+
+ <li class="BodyNoLead">This configuration file can be used to
+ specify alternate locations for the MPC Configuration File
+ (discussed below). If a <em class="Code">base.cfg</em> is found
+ underneath the <em class="Code">config</em> directory in the MPC
+ root directory, it will be read to determine the location of
+ MPC.cfg based on the directory in which MPC was started.</li>
+
+ <li class="Body">For example, if <em class=
+ "Code">$MPC_ROOT/mwc.pl</em> is run under <em class=
+ "Code">/foo/bar_root/src</em> and <em class=
+ "Code">$MPC_ROOT/config/base.cfg</em> contained:</li>
+
+ <li class="Body">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">MPC would attempt to open and read <em class=
+ "Code">/foo/bar_root/MPC/config/MPC.cfg</em> as the MPC
+ Configuration File. If the base configuration file is not present,
+ MPC will try to use <em class="Code">$MPC_ROOT/config/MPC.cfg</em>
+ as the MPC Configuration File.</li>
+
+ <li class="Body">You may reference environment variables, accessed
+ via the dollar sign (e.g., <em class="Code">$NAME</em>), on either
+ side of the equals sign.</li>
+ </ul>
+
+ <ul>
+ <li class="BodyNoLead">
+ <h6 class="Head5">MPC Configuration File</h6>
+ </li>
+
+ <li class="BodyNoLead">In an effort to move away from the use of
+ environment variables, a configuration file has been introduced.
+ The configuration file (<em class="Code">MPC.cfg</em>) can contain
+ settings to provide command line options, control logging and
+ direct MPC to dynamic project types.</li>
+
+ <li class="Body">The following keywords are allowed in the
+ configuration file.</li>
+
+ <li class="Body">
+ <table border="1" summary="Configuration File Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">command_line</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Provide additional command line options
+ to MPC. The value of this setting will be prepended to the
+ options passed to <em class="Code">mwc.pl</em> or
+ <em class="Code">mpc.pl</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">default_type</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Provide a single project type (as
+ specified by the <em class="Code">-type</em> option) as the
+ default project type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">dynamic_types</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This comma separated list points to
+ directories in which MPC will search for Perl modules to
+ implement additional MPC project types, base projects or
+ template files. This setting can be used to augment or
+ replace functionality in MPC. For each suitable directory
+ found, it will add a <em class="Code">modules</em> include
+ path for Perl to find modules, add a <em class=
+ "Code">config</em> include path to locate base projects and
+ a <em class="Code">template</em> include path to find MPC
+ templates.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">includes</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Similar to the <em class=
+ "Code">-include</em> command line option, it adds the list
+ of comma separated paths to the MPC include search
+ paths.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">logging</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this setting contains <em class=
+ "Code">info=1</em>, informational messages will be printed.
+ If it contains <em class="Code">warn=1</em>, warning
+ messages will be printed. If it contains <em class=
+ "Code">diag=1</em>, diagnostic messages will be printed. If
+ it contains <em class="Code">debug=1</em>, debug message
+ will be printed. And lastly, if it contains <em class=
+ "Code">detail=1</em>, detail messages will be printed. If
+ it contains none of these, MPC will not print out any
+ information or warnings when processing projects or
+ workspaces. Errors are always printed if any are
+ encountered. The default value is <em class="Code">warn=1,
+ diag=1, detail=1</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">main_functions</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Provide additional main functions to be
+ recognized in conjunction with automatic executable project
+ recognition. The value assigned should be of the form
+ <em class="Code">&lt;language&gt;:&lt;func name&gt;[,
+ &lt;language&gt;:&lt;func name&gt;]*</em>. A function can
+ be specified for all languages by only providing the
+ function name.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">verbose_ordering</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is set, mwc.pl will warn the
+ user about references to projects in the <em class=
+ "Code">after</em> keyword that have not been processed.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h4 class="Head3">Environment Variables</h4>
+
+ <ul>
+ <li class="BodyNoLead">MPC recognizes a few environment variables
+ that alter the way it performs certain tasks. The sections below
+ describe each one and the effect it has on MPC.</li>
+
+ <li class="Body">The <em class=
+ "Code">MPC_DEPENDENCY_COMBINED_STATIC_LIBRARY</em> environment
+ variable only affects the way workspace dependencies are created
+ for <em class="Emphasis">static</em> projects with the <em class=
+ "Code">em3</em>, <em class="Code">vc6</em>, <em class=
+ "Code">vc7</em>, <em class="Code">vc71</em>, vc8, vc9 and
+ <em class="Code">vc10</em> project types. If this environment
+ variable is set, MPC will generate inter-project dependencies for
+ libraries within a single workspace. This is usually not desired
+ since adding these dependencies in a static workspace has the side
+ effect of including dependee libraries into the dependent
+ library.</li>
+
+ <li class="Body">The <em class="Code">MPC_GHS_UNIX</em> environment
+ variable is only meaningful when generating the ghs project files.
+ By default, the ghs type assumes that it is for Windows. Set this
+ environment variable prior to running MPC if this is not the
+ case.</li>
+
+ <li class="Body">The <em class="Code">MPC_USE_WIN_COMMANDS</em>
+ environment variable causes the Windows related pseudo template
+ variables to be used regardless of the type of project being
+ generated.</li>
+ </ul>
+ </div>
+ </div>
+
+ <div>
+ <h3 class="Head2">Writing MPC and MWC Files</h3>
+ <hr>
+
+ <ul>
+ <li class="Body">You may want to familiarize yourself with the
+ various input files for MPC. The input file types and the syntax of
+ each are discussed in the sections below.</li>
+ </ul>
+
+ <div>
+ <h4 class="Head3">Input Files</h4>
+
+ <ul>
+ <li class="BodyNoLead">There are four different input files
+ associated with MPC. For most users of MPC, the main files of
+ concern are mpc and mwc files.</li>
+ </ul>
+
+ <div>
+ <h5 class="Head4">Project Files (mpc)</h5>
+
+ <ul>
+ <li class="BodyNoLead">Project files, those with the <em class=
+ "Code">mpc</em> extension, contain such things as include paths,
+ library paths, source files and inter-project dependencies. An
+ mpc file can contain one or more &ldquo;projects&rdquo; each of
+ which needs to be uniquely named to avoid project generation
+ errors. Projects represent build targets such as libraries and
+ executables.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Workspace Files (mwc)</h5>
+
+ <ul>
+ <li class="BodyNoLead">Workspaces are defined by providing a list
+ of mpc files, directories or other mwc files in a single mwc
+ file. For each mpc file, the Workspace Creator calls upon the
+ Project Creator to generate the project. After all of the
+ projects are successfully generated, the tool-specific workspace
+ is generated containing the projects and any defined
+ inter-project dependency information (if supported by the build
+ tool). An mwc file can contain one or more
+ &ldquo;workspaces,&rdquo; each of which needs to be uniquely
+ named. If no workspace files are provided to the workspace
+ creator, the current directory is traversed and any mpc files
+ located will be part of the workspace that is generated.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Base Project Files (mpb)</h5>
+
+ <ul>
+ <li class="BodyNoLead">One of the many unique and useful features
+ of MPC is that the project definition files can use inheritance.
+ Project inheritance allows a user to set up a base project (mpb
+ file) that can contain information that is applicable to all
+ derived projects. Common project attributes, such as include
+ paths, library paths, and inter-project dependencies, could be
+ described in this base project and any project that inherits from
+ it would contain this information as well.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Base Workspace Files (mwb)</h5>
+
+ <ul>
+ <li class="BodyNoLead">As with projects, workspaces can also
+ inherit from other workspaces. A base workspace can provide
+ workspace information that may be common to other
+ workspaces.</li>
+ </ul>
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">General Input File Syntax</h4>
+
+ <ul>
+ <li class="BodyNoLead">In this section we discuss the syntax of the
+ various files. We also describe some of the default values that go
+ along with these files.</li>
+ </ul>
+
+ <div>
+ <h5 class="Head4">mwc and mwb</h5>
+
+ <ul>
+ <li class="BodyNoLead">Workspaces can contain individual mpc
+ files or directories. There can be one or more workspaces defined
+ within a single mwc file.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">workspace(optional name):
+ optional_base_workspace {</p>
+
+ <p class="Code">&nbsp;&nbsp;file.mpc</p>
+
+ <p class="Code">&nbsp;&nbsp;directory</p>
+
+ <p class="Code">&nbsp;&nbsp;other.mwc</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;exclude(vc6, vc7, vc71, vc8, vc9,
+ vc10, nmake) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;this_directory</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="BodyNoLead">A workspace can be given a name. This is
+ the value given in the parentheses after the keyword <em class=
+ "Code">workspace</em>. If the workspace is not given a name, the
+ workspace name is taken from the name of the mwc file without the
+ extension.</li>
+
+ <li class="Body">Workspaces can also inherit from other
+ workspaces. In the above example, <em class=
+ "Code">optional_base_workspace</em> would be the base name of an
+ mwb file with no extension that contains workspace information.
+ This information would then be included in each workspace that
+ inherits from it.</li>
+
+ <li class="Body">The lines between the curly braces contain
+ assignments, mpc files, directories, other workspace files or
+ exclusion sections. The mpc files listed will be included in the
+ workspace. If a directory is listed within the workspace, the
+ workspace creator will recursively traverse that directory and
+ use any mpc files that are found. If a workspace file is listed
+ it will be aggregated into the main workspace.</li>
+
+ <li class="Body">A workspace can have assignments interspersed
+ within the directories and mpc files. These assignments modify
+ the way projects are generated.</li>
+
+ <li class="Body">The <em class="Code">cmdline</em> setting can be
+ used to provide command line options that would normally be
+ passed to <em class="Code">mwc.pl</em> (see <a href=
+ "MakeProjectCreator.html#Command%20Line%20Options" class=
+ "XRef">Command Line Options</a>). However, the <em class=
+ "Code">-type</em>, <em class="Code">-recurse</em> , <em class=
+ "Code">-noreldefs</em> , <em class="Code">-make_coexistence</em>,
+ <em class="Code">-genins</em>, <em class="Code">-into</em> and
+ <em class="Code">-language</em> options as well as input files
+ are ignored. Environment variables may be accessed through
+ <em class="Code">$NAME</em>, where <em class="Code">NAME</em> is
+ the environment variable name. The <em class="Code">cmdline</em>
+ assignment may be useful for workspaces that require specific
+ <em class="Code">mwc.pl</em> options in order to process
+ correctly.</li>
+
+ <li class="Body">The only other setting supported by mwc.pl is
+ <em class="Code">implicit</em>. If <em class="Code">implicit</em>
+ is set to <em class="Code">1</em> then default project files are
+ generated in each directory where no mpc file exists. The
+ <em class="Code">implicit</em> keyword can also be set to the
+ name of a base project. In this case, the implicitly generated
+ project will inherit from the base project specified in the
+ assignment. Either way, if the directory does not contain files
+ that can be used within a project, no project is created. Setting
+ <em class="Code">implicit</em> can be useful when you want to
+ define specific workspaces, but the MPC defaults are sufficient
+ for the directories involved within the workspace.</li>
+
+ <li class="Body">Scoped assignments are assignments that are
+ associated with specific mpc files or directories listed with the
+ scope of the assignment. The following example shows a scoped
+ assignment of <em class="Code">cmdline</em> that only applies to
+ <em class="Code">one of the mpc files listed in the
+ workspace</em>. In this example, <em class=
+ "Code">directory/foo.mpc</em> would be processed as if the
+ <em class="Code">-static</em> option had been passed on the
+ command line whereas other directories and mpc files would
+ not.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">workspace {</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">&nbsp;&nbsp;static {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;cmdline += -static</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;directory/foo.mpc</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;exclude(gnuace, make) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;some.mpc</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;// Associate the name "other" with
+ dir3</p>
+
+ <p class="Code">&nbsp;&nbsp;associate(other) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;dir3</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Exclusion sections are used to prevent
+ directories and mpc files from being processed. These excluded
+ directories and mpc files will be skipped when generating project
+ files and workspaces. The <em class="Code">exclude</em> keyword
+ accepts project types within the parentheses (as above), which
+ will cause the workspace creator to only exclude the listing for
+ particular types. If no types are provided, exclusion will take
+ place for all project types.</li>
+
+ <li class="Body">The <em class="Code">associate</em> scope
+ associates a name with one or more directories. This does not add
+ directories to a workspace, it only makes an association. This
+ may or may not have an effect on the generated workspace; it
+ depends solely upon whether the project type supports
+ associations. Currently <em class="Code">automake</em> is the
+ only project type that supports associations. Each directory
+ listed under an association is grouped together and built
+ conditionally based on the association name.</li>
+
+ <li class="Body">Comments are similar to the C++ style comments.
+ Any text after a double slash (<em class="Code">//</em> ) is
+ considered a comment.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">mpc and mpb</h5>
+
+ <div>
+ <h6 class="Head5">Project Declarations</h6>
+
+ <ul>
+ <li class="BodyNoLead">Project declarations are similar to
+ workspace declarations, but are a bit more complex. An mpc file
+ can contain one or more &ldquo;projects&rdquo; and each project
+ can inherit from base projects.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project(optional name): base_project,
+ another_base_project {</p>
+
+ <p class="Code">&nbsp;&nbsp;exename = client</p>
+
+ <p class="Code">&nbsp;&nbsp;includes += directory_name
+ other_directory</p>
+
+ <p class="Code">&nbsp;&nbsp;libpaths += /usr/X11R6/lib</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Header_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.h</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.h</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.h</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="BodyNoLead">If the optional project name is not
+ given, then the project name is taken from the name of the mpc
+ file without the extension. Therefore, if your mpc file is
+ going to contain multiple projects, it is important to provide
+ project names to prevent each generated project from
+ overwriting the other. MPC will issue an error and stop if
+ duplicate project names are detected.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Base Projects</h6>
+
+ <ul>
+ <li class="BodyNoLead">Base projects can be of the extension
+ <em class="Code">mpb</em> and <em class="Code">mpc</em>. If a
+ file with the name of the base project with an <em class=
+ "Code">mpb</em> or <em class="Code">mpc</em> extension cannot
+ be found within the mpc include search path, a fatal error is
+ issued and processing halts.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Assignment Keywords</h6>
+
+ <ul>
+ <li class="BodyNoLead">This table shows the keywords that can
+ be used in an assignment (i.e., <em class="Code">=</em>,
+ <em class="Code">+=</em> or <em class="Code">-=</em> ) within
+ an mpc file. The most commonly used keywords are shown in bold
+ face.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle"><a name="82186"></a>Assignment
+ Keywords</h6>
+
+ <table border="1" summary="Assignment Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">after</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies that this project must be
+ built after 1 or more project names listed.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">avoids</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies which features should be
+ disabled in order to generate the project file. Under
+ the GNUACE type, it also specifies which make macros
+ should not be set to build the target.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">custom_only</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This setting instructs MPC to
+ create projects that only contain custom generation
+ targets. Any files included in the projects will be
+ provided by custom component lists defined through the
+ use of <em class="Code">Define_Custom</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">dllout</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If defined, specifies where the
+ dynamic libraries will be placed. This overrides libout
+ in the dynamic case.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">dynamicflags</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies preprocessor flags passed
+ to the compiler when building a dynamic library.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">exename</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Determines that the project will be
+ an executable and the name of the executable
+ target.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">exeout</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies where executables will be
+ placed.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">includes</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies one or more directories
+ to supply to the compiler for use as include search
+ paths.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">libout</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies where the dynamic and
+ static libraries will be placed.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">libpaths</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies one or more directories
+ to supply to the compiler for use as library search
+ paths.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">libs</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies one or more libraries to
+ link into the target. Library modifiers may be added
+ when being processed in the template file. For example,
+ library modifiers are added when using the vc6 project
+ type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">lit_libs</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as libs except
+ that a library modifier will not be added.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">macros</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Values supplied here will be passed
+ directly to the compiler as command line defined
+ macros.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">managed</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies that the source files
+ should be compiled as managed C++. This is only
+ supported by the <em class="Code">nmake</em>,
+ <em class="Code">vc7</em>, <em class="Code">vc71</em>,
+ <em class="Code">vc8</em>, <em class="Code">vc9</em>,
+ and <em class="Code">vc10</em> project types.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">no_pch</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">It specifies that precompiled
+ headers should not be used for the source files listed
+ within the scope of it&rsquo;s setting. This keyword
+ can only be used as a source component scoped setting
+ (i.e., inside the scope of Source_Files).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pch_header</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The name of the precompiled header
+ file. See the discussion below this table for more
+ information.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pch_source</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The name of the precompiled source
+ file. See the discussion below this table for more
+ information.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">postbuild</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is defined in the project,
+ the value will be interpreted as commands to run after
+ the project has been successfully built. The <em class=
+ "Code">&lt;% %&gt;</em> construct (see <a href=
+ "MakeProjectCreator.html#MPD%20Syntax" class=
+ "XRef">Template Files</a>) can be used within this
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common%20Pseudo%20Variables" class="XRef">Common
+ Pseudo Variables</a> for a list of pseudo variables
+ that are also available.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">postclean</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is defined in the project,
+ the value will be interpreted as commands to run after
+ the project has been cleaned. It should be noted that
+ this setting is not supported by all project types. As
+ with <em class="Code">postbuild</em>, the <em class=
+ "Code">&lt;% %&gt;</em> construct (see <a href=
+ "MakeProjectCreator.html#MPD%20Syntax" class=
+ "XRef">Template Files</a>) can be used within this
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common%20Pseudo%20Variables" class="XRef">Common
+ Pseudo Variables</a> for a list of pseudo variables
+ that are also available.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">prebuild</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is defined in the project,
+ the value will be interpreted as commands to run before
+ the project has been built. As with <em class=
+ "Code">postbuild</em>, the <em class="Code">&lt;%
+ %&gt;</em> construct (see <a href=
+ "MakeProjectCreator.html#MPD%20Syntax" class=
+ "XRef">Template Files</a>) can be used within this
+ value to access template variables and functions of the
+ template parser. See <a href=
+ "#Common%20Pseudo%20Variables" class="XRef">Common
+ Pseudo Variables</a> for a list of pseudo variables
+ that are also available.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pure_libs</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is similar to <em class=
+ "Code">lit_libs</em> except that no prefix or extension
+ is added to the names specified.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">recurse</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If set to 1, MPC will recurse into
+ directories listed under component listings (such as
+ Source_Files, Header_Files, etc.) and add any component
+ corresponding files to the list. This keyword can be
+ used as a global project setting or a component scoped
+ setting.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">recursive_includes</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is similar to <em class=
+ "Code">includes</em> in that it provides include paths
+ to the compiler. However, each path supplied will be
+ recursively searched for sub-directories which will
+ also be provided as include paths to the compiler.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">recursive_libpaths</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is similar to <em class=
+ "Code">libpaths</em> in that it provides library search
+ paths to the linker. However, each path supplied will
+ be recursively searched for sub-directories which will
+ also be provided as library search paths to the
+ linker.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">requires</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies which features should be
+ enabled in order to generate the project file. Under
+ the GNUACE type, it also specifies which make macros
+ should be set to build the target.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">sharedname</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Determines that the project will be
+ a library and the name of the dynamic library target.
+ See the discussion below this table for more
+ information.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">staticflags</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies preprocessor flags passed
+ to the compiler when building a static library.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="Bold"><em class=
+ "TableCode">staticname</em></em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Determines that the project will be
+ a library and the name of the static library
+ target.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">tagchecks</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">For GNUACE Make only, specifies one
+ or more names to search for in the macros specified by
+ tagname.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">tagname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies the GNUACE Make macro to
+ check before building the target.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">version</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Specifies the version number for
+ the library or executable.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">webapp</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Determines whether the project is a
+ Web Application. A web application project will have no
+ project file written but the information will be
+ included in the workspace if web applications are
+ supported by the project type.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="BodyNoLead">Assignments can also use the <em class=
+ "Code">+=</em> and <em class="Code">-=</em> operators to add
+ and subtract values from keyword values.</li>
+
+ <li class="Body">If a <em class="Code">sharedname</em> is
+ specified in the mpc file and <em class="Code">staticname</em>
+ is not used, then <em class="Code">staticname</em> is assumed
+ to be the same as <em class="Code">sharedname</em>. This also
+ applies in the opposite direction.</li>
+
+ <li class="Body">If neither exename, sharedname nor staticname
+ is specified, MPC will search the source files for a <em class=
+ "Code">main</em> function. If a <em class="Code">main</em> is
+ found, the exename will be set to the name of the file, minus
+ the extension, that contained the <em class="Code">main</em>
+ function. Otherwise, sharedname and staticname will be set to
+ the project name.</li>
+
+ <li class="Body">If the project name, exename, sharedname or
+ staticname contain an asterisk it instructs MPC to dynamically
+ determine a portion of the name based on certain defaults. If
+ the project name contains an asterisk, then the asterisk will
+ be replaced with the default project name. If exename,
+ sharedname or staticname contains an asterisk, then the
+ asterisk will be replaced with the project name.</li>
+
+ <li class="Body">If the <em class="Code">pch_header</em>
+ keyword is not used and a file exists, in the directory in
+ which the mpc file is located, that matches <em class=
+ "Code">*_pch.h</em> it is assumed to be the precompiled header
+ for that directory. If there are multiple pch files in the
+ directory, then the precompiled header that closely matches the
+ project name will be chosen. Similar logic applies for the
+ <em class="Code">pch_source</em> keyword.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="16907"></a>
+
+ <h6 class="Head5">Components</h6>
+
+ <ul>
+ <li class="BodyNoLead">An mpc file can also specify the files
+ to be included in the generated &ldquo;project&rdquo; file.
+ These files are specified using the component names shown in
+ the following table. However, most of the time users will want
+ to allow MPC to provide the default values for project
+ files.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">Component Names and Default
+ Values</h6>
+
+ <table border="1" summary=
+ "Component Names and Default Values">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Name</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Default Value</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Source_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">cpp</em>, <em class="Code">cxx</em>,
+ <em class="Code">cc</em>, <em class="Code">c</em>, and
+ <em class="Code">C</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Header_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">h</em>, hpp, <em class=
+ "Code">hxx</em>, and <em class="Code">hh</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Inline_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that have the following extensions:
+ <em class="Code">i</em> and <em class=
+ "Code">inl</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Template_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that end in the following: <em class=
+ "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>,
+ <em class="Code">_T.cc</em>, <em class=
+ "Code">_T.c</em>, and <em class="Code">_T.C</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Documentation_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that match the following: <em class=
+ "Code">README</em>, <em class="Code">readme</em>,
+ <em class="Code">.doc</em>, <em class="Code">.html</em>
+ and <em class="Code">.txt</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">Resource_Files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Defaults to all files in the
+ directory that match the project name and have an
+ <em class="Code">rc</em> extension.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">If a component is not specified in the mpc
+ file, the default value will be used. To disallow a particular
+ set of files that may exist in the directory, you must declare
+ an empty set of the particular component type.</li>
+
+ <li class="Body">Each component name accepts two forms. The
+ first form is a simple list of files within the construct.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Source_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;file1.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;file2.cpp</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The second form is a complex list of files
+ within named blocks.</li>
+
+ <li style="list-style: none">
+ <a name="MPC grouping example"></a>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Source_Files(MACRO_NAME) {</p>
+
+ <p class="Code">&nbsp;&nbsp;BlockA {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;BlockB {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file3.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file4.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The second form allows the user to logically
+ group the files to make future maintenance easier. Using this
+ form has the effect of visually grouping files in the generated
+ project file for the <em class="Code">em3</em>, <em class=
+ "Code">gnuace</em>, <em class="Code">vc6</em>, <em class=
+ "Code">vc7</em>, <em class="Code">vc71</em>, vc8, vc9 and
+ <em class="Code">vc10</em> project types.</li>
+
+ <li class="Body">If a file is listed in the <em class=
+ "Code">Source_Files</em> component list and a corresponding
+ header or inline file exists in the directory, it is added to
+ the corresponding component list unless it is already
+ listed.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Verbatim Clause</h6>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">verbatim</em>
+ construct can be used to place text into a generated project
+ file verbatim. The <em class="Code">verbatim</em> syntax is as
+ follows:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">verbatim(&lt;project type&gt;,
+ &lt;location&gt;) {</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">When MPC is generating a project of type
+ <em class="Code">&lt;project type&gt;</em> and encounters a
+ <em class="Code">marker</em> in the template file (see <a href=
+ "MakeProjectCreator.html#38037" class="XRef">Template File
+ Keywords</a>) that matches the <em class=
+ "Code">&lt;location&gt;</em> name, it will place the text found
+ inside the construct directly into the generated project. If
+ the text inside the construct requires that white space be
+ preserved, each line must be enclosed in double quotes. The
+ following <em class="Code">verbatim</em> example would result
+ in <em class="Code">gnuace</em> generated projects having a
+ rule at the bottom of the GNUmakefile where the <em class=
+ "Code">all:</em> target depends on <em class=
+ "Code">foo</em>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">verbatim(gnuace, bottom) {</p>
+
+ <p class="Code">&nbsp;&nbsp;all: foo</p>
+
+ <p class="Code">}</p>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Expand Clause</h6>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">expand</em> keyword
+ can be used to provide values for variable names enclosed
+ within <em class="Code">$()</em>. In the example below, we see
+ the name <em class="Code">VAR_NAME</em> inside the parenthesis.
+ Whenever MPC sees <em class="Code">$(VAR_NAME)</em> it will
+ attempt to replace it with values from the expansion list. MPC
+ will first try to replace it with the value of the environment
+ variable named <em class="Code">ENV_VAR</em>. If that
+ environment variable has a value, it will be used. Otherwise,
+ it will continue down the list until a suitable value is found.
+ In this example, the text <em class=
+ "Code">last_resort_value</em> will be used. MPC will leave the
+ <em class="Code">$()</em> value as it was in the event that no
+ value is found.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">expand(VAR_NAME) {</p>
+
+ <p class="Code">&nbsp;&nbsp;$ENV_VAR</p>
+
+ <p class="Code">&nbsp;&nbsp;last_resort_value</p>
+
+ <p class="Code">}</p>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Specific Clause</h6>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">specific</em>
+ keyword can be used to define assignments that are specific to
+ a particular project type or property specified in the
+ parenthesis. This will allow platform or OS-specific values to
+ be placed into a project. For example, on one platform you may
+ want to link in a library named <em class="Code">qt-mt</em>,
+ but on another you need to link in <em class=
+ "Code">qt-mt230nc</em>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">specific(prop:windows) {</p>
+
+ <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt230nc</p>
+
+ <p class="Code">} else {</p>
+
+ <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">If an else clause is provided, it is required
+ to be on the same line as the closing curly brace. You may also
+ negate the project type or property (using &rsquo;!&rsquo;)
+ which will cause the specific to be evaluated for all types
+ except the type specified.</li>
+
+ <li class="Body">If a keyword used within a <em class=
+ "Code">specific</em> section is not recognized as a valid MPC
+ keyword, it is interpreted to be template value modifier. In
+ this situation, this construct works exactly the same way as
+ the <em class="Code">-value_template</em> command line option
+ (see <a href="MakeProjectCreator.html#Command%20Line%20Options"
+ class="XRef">Command Line Options</a>).</li>
+
+ <li class="Body">The following table shows which properties
+ apply to which project types. The <em class="Code">static</em>
+ property (not represented in the table) is set if the -static
+ option is supplied when processing the project files.
+ Additionally, a property that corresponds to the language
+ will be set (e.g., cplusplus, csharp, java, vb).</li>
+
+ <li class="Body">
+ <h6 class="NumberedTableTitle"><a name=
+ "Property Table"></a>Property Table</h6>
+
+ <table border="1" summary="Property Table">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Project Type</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">borland</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">make</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">microsoft</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">windows</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">automake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">bcb2007</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">bcb2009</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">bds4</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">bmake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">cc</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">em3</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">ghs</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Depends</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">make</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">nmake</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc6</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc7</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc71</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc8</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc9</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vc10</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">wix</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">&nbsp;</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Yes</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">The ghs project type can be used on both
+ Windows and UNIX. The windows property will be active if the
+ <em class="Code">MPC_GHS_UNIX</em> environment variable is not
+ set during project generation.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Conditional Clause</h6>
+
+ <ul>
+ <li class="Body">This scope allows addition of source files
+ conditionally based on a particular project type or property
+ (see the <a href="#Property%20Table" class="XRef">property
+ table</a>). The syntax is as follows:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">conditional(&lt;project type|property&gt; [,
+ &lt;project type|property&gt; ...]) {</p>
+
+ <p class="Code">&nbsp;&nbsp;source1.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">conditional(&lt;project type|property&gt; [,
+ &lt;project type|property&gt; ...]) {</p>
+
+ <p class="Code">&nbsp;&nbsp;source1.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">} else {</p>
+
+ <p class="Code">&nbsp;&nbsp;source2.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">If the else is provided, it is required to be
+ on the same line as the closing curly brace. You may also
+ negate the project type (using &rsquo;!&rsquo;) which will
+ cause the conditional to be evaluated for all types except the
+ type specified.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="Custom Types and Build Rules"></a>
+
+ <h6 class="Head5">Custom Types and Build Rules</h6>
+
+ <ul>
+ <li class="BodyNoLead">MPC allows you to define your own custom
+ file types to support a variety of custom build rules. Below is
+ an example of a custom definition.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project {</p>
+
+ <p class="Code">&nbsp;&nbsp;Define_Custom(MOC) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;automatic = 0</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;command =
+ $(QTDIR)/bin/moc</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;output_option =
+ -o</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inputext = .h</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;pre_extension =
+ _moc</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;source_outputext =
+ .cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;keyword mocflags =
+ commandflags</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;// Custom Component</p>
+
+ <p class="Code">&nbsp;&nbsp;MOC_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor.h</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor_moc.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The above example defines a custom file type,
+ &ldquo;<em class="Code">MOC</em> &rdquo;, that describes basic
+ information about how to process the input files and what
+ output files are created. Once the custom file type is defined,
+ <em class="Code">MOC_Files</em> can be used to specify the
+ input files for this new file type.</li>
+
+ <li class="Body">The following table contains the keywords that
+ can be used within the scope of <em class=
+ "Code">Define_Custom</em>.</li>
+
+ <li style="list-style: none">
+ <a name="32899"></a>
+
+ <h6 class="NumberedTableTitle">Define_Custom Keywords</h6>
+
+ <table border="1" summary="Define_Custom Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">automatic_in</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If set to 1, then attempt to
+ automatically determine which files belong to the set
+ of input files for the custom type. If set to 0, then
+ no files are automatically added to the input
+ files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">automatic_out</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If set to 1, then attempt to
+ automatically determine which generated files belong to
+ the set of components (<em class=
+ "Code">Source_Files</em>, <em class=
+ "Code">Inline_Files</em> , <em class=
+ "Code">Header_Files</em>, <em class=
+ "Code">Template_Files</em>, <em class=
+ "Code">Resource_Files</em> and <em class=
+ "Code">Documentation_Files</em>) based on type files
+ that the command generates. If omitted, then
+ automatic_out is assumed to be 1.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">command</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The name of the command that should
+ be used to process the input files for the custom
+ type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">commandflags</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Any options that should be passed
+ to the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">dependent</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is given a value, then a
+ dependency upon that value will be given to all of the
+ generated files. The default for this is unset and no
+ dependency will be generated.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ input file extensions that belong to the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">keyword
+ &lt;name&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a special assignment that
+ allows the user to map &lt;name&gt; into the project
+ level namespace. The value (if any) that is assigned to
+ this construct must be one of the keywords that can be
+ used within a Define_Custom clause. The result of this
+ assignment is the ability modify the value of keywords
+ that are normally only accessible within the scope of a
+ custom component (e.g. <em class="Code">command</em>,
+ <em class="Code">commandflags</em>, etc.).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">libpath</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If the command requires a library
+ that is not in the normal library search path, this
+ keyword can be used to ensure that the command is able
+ to find the library that it needs to run.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">output_option</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If the command takes an option to
+ specify a single file output name, then set it here.
+ Otherwise, this should be omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">output_follows_input</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This setting defaults to 1 and
+ indicates that output files from the custom command
+ will end up in the same directory as the input files.
+ If this is set to 0, it is assumed that the output
+ files will go into the same directory as the .mpc
+ file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pch_postrule</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If this is set to 1, then a rule
+ will be added to the custom rule that will modify the
+ source output files to include the precompiled header
+ file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">postcommand</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This allows users to create
+ arbitrary commands that will be run after the main
+ command is run to process the custom input files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If the command produces multiple
+ files of the same extension, this comma separated list
+ can be used to specify them. For example, <em class=
+ "Code">tao_idl</em> creates two types of files per
+ extension (<em class="Code">C.h</em>, <em class=
+ "Code">S.h</em>, <em class="Code">C.cpp</em>,
+ <em class="Code">S.cpp</em>, etc.) This applies to all
+ extension types.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to source files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inline_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to inline files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">header_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to header files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">template_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to template files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">resource_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to resource files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">documentation_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to documentation files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">generic_pre_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_extension
+ except that it only applies to generic files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The syntax for this is the same as
+ <em class="Code">pre_extension</em>, but the values
+ specified are prepended to the file name instead of the
+ extension. This applies to all extension types.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to source files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inline_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to inline files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">header_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to header files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">template_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to template files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">resource_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to resource files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">documentation_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to documentation files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">generic_pre_filename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_filename
+ except that it only applies to generic files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The syntax for this is the same as
+ <em class="Code">pre_filename</em>, but the value
+ specified is prepended to the directory portion of the
+ file name instead of the file name itself. If a
+ separate directory is desired, the <em class=
+ "Code">pre_dirname</em> setting should end in a
+ slash.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to source files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inline_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to inline files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">header_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to header files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">template_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to template files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">resource_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to resource files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">documentation_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to documentation files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">generic_pre_dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is the same as pre_dirname
+ except that it only applies to generic files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible source file output extensions. If the command
+ does not produce source files, then this can be
+ omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inline_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible inline file output extensions. If the command
+ does not produce inline files, then this can be
+ omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">header_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible header file output extensions. If the command
+ does not produce header files, then this can be
+ omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">template_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible template file output extensions. If the
+ command does not produce template files, then this can
+ be omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">resource_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible resource file output extensions. If the
+ command does not produce resource files, then this can
+ be omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">documentation_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is a comma separated list of
+ possible documentation file output extensions. If the
+ command does not produce documentation files, then this
+ can be omitted.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">generic_outputext</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">If the command does not generate
+ any of the other output types listed above, then the
+ extensions should be listed under this.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">There is a special interaction between custom
+ components and the source, header and inline components. If a
+ <em class="Code">custom</em> definition is set to be
+ &ldquo;automatic&rdquo; and custom component files are present
+ but not specified, the default custom generated names are added
+ to the source, header and inline component lists unless those
+ names are already listed (or partially listed) in those
+ component lists. See <a href=
+ "MakeProjectCreator.html#Custom%20Types%20and%20Build%20Rules"
+ class="XRef">Custom Types and Build Rules</a> for more
+ information about defining your own custom type.</li>
+
+ <li class="Body">Particular output extensions for custom build
+ types are not required. However, at least one output extension
+ type is required for MPC to generate a target. Your command
+ does not necessarily have to generate output, but an extension
+ type is required if you want the input file to be processed
+ during the project compilation.</li>
+
+ <li class="Body">If the custom output can not be represented
+ with the above output extension keywords (*_outputext) and you
+ have knowledge of the output files <em class="Emphasis">a
+ priori</em>, you can represent them with the <em class=
+ "Code">&gt;&gt;</em> construct.</li>
+
+ <li class="Body">Below is an example that demonstrates the use
+ of <em class="Code">&gt;&gt;</em>. The command takes an input
+ file name of foo.prp and produces two files that have
+ completely unrelated filenames, <em class="Code">hello.h</em>
+ and <em class="Code">hello.cpp</em>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project {</p>
+
+ <p class="Code">&nbsp;&nbsp;Define_Custom(Quogen) {</p>
+
+ <p class="Code">&nbsp;&nbsp;automatic = 0</p>
+
+ <p class="Code">&nbsp;&nbsp;command = perl quogen.pl</p>
+
+ <p class="Code">&nbsp;&nbsp;commandflags = --debuglevel=1
+ --language=c++ \</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--kernel_language=c++</p>
+
+ <p class="Code">&nbsp;&nbsp;inputext = .prp</p>
+
+ <p class="Code">&nbsp;&nbsp;keyword quogenflags =
+ commandflags</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Quogen_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;foo.prp &gt;&gt;
+ hello.h hello.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Source_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;hello.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">You can use the <em class="Code">&lt;&lt;</em>
+ construct to represent dependencies for specific custom input
+ file. For instance, in the above example, assume that foo.prp
+ depends upon foo.in, we would represent this by adding
+ <em class="Code">&lt;&lt;</em> foo.in as shown below.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Quogen_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;foo.prp &gt;&gt; hello.h
+ hello.cpp &lt;&lt; foo.in</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">An additional construct can be used within the
+ scope of a <em class="Code">Define_Custom</em>. This construct
+ is called <em class="Code">optional</em>, and can be used to
+ represent optional custom command output that is dependent upon
+ particular command line parameters passed to the custom
+ command.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project {</p>
+
+ <p class="Code">&nbsp;&nbsp;Define_Custom(TEST) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;optional(keyword)
+ {</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag_keyword(option) +=
+ value [, value]</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+ </li>
+
+ <li class="Body">In the above fragment, <em class=
+ "Code">keyword</em> can be any of the <em class=
+ "Code">pre_extension</em>, <em class="Code">pre_filename</em>
+ keywords or any of the keywords that end in <em class=
+ "Code">_outputext</em>. The <em class="Code">flag_keyword</em>
+ can be any of the custom definition keywords, however only
+ <em class="Code">commandflags</em> has any functional value.
+ The <em class="Code">flag_keyword</em> value is searched for
+ the <em class="Code">option</em> value contained inside the
+ parenthesis. If it is found the <em class="Code">value</em> or
+ <em class="Code">values</em> after the += are added to the list
+ specified by <em class="Code">keyword</em>. This can also be
+ negated by prefixing the <em class="Code">option</em> with an
+ exclamation point (!).</li>
+
+ <li class="Body">The example below shows how the <em class=
+ "Code">optional</em> construct is used by the custom definition
+ for the <em class="Code">tao_idl</em> command (see <em class=
+ "Code">ACE_wrappers/TAO/MPC/config/taoidldefaults.mpb</em> ).
+ The <em class="Code">-GA</em> option causes <em class=
+ "Code">tao_idl</em> to generate an additional source file
+ (based on the idl file name) with an <em class=
+ "Code">A.cpp</em> extension. The <em class="Code">-Sc</em>
+ option causes <em class="Code">tao_idl</em> to suppress the
+ generation of <em class="Code">S_T</em> related files.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Define_Custom(IDL) {</p>
+
+ <p class="Code">&nbsp;&nbsp;...</p>
+
+ <p class="Code">&nbsp;&nbsp;inputext = .idl</p>
+
+ <p class="Code">&nbsp;&nbsp;source_pre_extension = C, S</p>
+
+ <p class="Code">&nbsp;&nbsp;header_pre_extension = C, S</p>
+
+ <p class="Code">&nbsp;&nbsp;inline_pre_extension = C, S</p>
+
+ <p class="Code">&nbsp;&nbsp;source_outputext = .cpp, .cxx,
+ .cc, .C</p>
+
+ <p class="Code">&nbsp;&nbsp;header_outputext = .h, .hpp,
+ .hxx, .hh</p>
+
+ <p class="Code">&nbsp;&nbsp;inline_outputext = .inl, .i</p>
+
+ <p class="Code">&nbsp;&nbsp;keyword idlflags =
+ commandflags</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;optional(source_pre_extension)
+ {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(-GA) +=
+ A</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;optional(template_outputext)
+ {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T.cpp, S_T.cxx, S_T.cc, S_T.C</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;optional(header_pre_extension)
+ {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;optional(inline_pre_extension)
+ {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
+ S_T</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">For custom file types, there are a few
+ keywords that can be used within the custom file type component
+ lists: <em class="Code">command</em>, <em class=
+ "Code">commandflags</em>, <em class="Code">dependent</em>,
+ <em class="Code">gendir</em>, <em class=
+ "Code">postcommand</em>, and <em class=
+ "Code">recurse</em>.</li>
+
+ <li class="Body">The <em class="Code">recurse</em> keyword
+ works as described in <a href="MakeProjectCreator.html#82186"
+ class="XRef">Assignment Keywords</a>.</li>
+
+ <li class="Body">The <em class="Code">command</em>, <em class=
+ "Code">commandflags</em>, <em class="Code">dependent</em> and
+ <em class="Code">postcommand</em> keywords can be used to
+ augment or override the value defined in the <em class=
+ "Code">Define_Custom</em> section.</li>
+
+ <li class="Body">The <em class="Code">gendir</em> keyword can
+ be used (only if <em class="Code">output_option</em> is set in
+ <em class="Code">Define_Custom</em> ) to specify the directory
+ in which the generated output will go. Here is an example:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">MOC_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;commandflags += -nw</p>
+
+ <p class="Code">&nbsp;&nbsp;gendir = moc_generated</p>
+
+ <p class="Code">&nbsp;&nbsp;QtReactor.h</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Source_Files {</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;moc_generated/QtReactor_moc.cpp</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">In the above example, the <em class=
+ "Code">-nw</em> option is added to <em class=
+ "Code">commandflags</em> and the generated file (<em class=
+ "Code">QtReactor_moc.cpp</em> ) is placed in the <em class=
+ "Code">moc_generated</em> directory. If the <em class=
+ "Code">MOC</em> custom definition did not have an <em class=
+ "Code">output_option</em> setting, then options would need to
+ be added to <em class="Code">commandflags</em> or a <em class=
+ "Code">postcommand</em> would need to be defined to ensure that
+ the output actually went into the <em class=
+ "Code">moc_generated</em> directory.</li>
+ </ul>
+
+ <div>
+ <h6 class="Head6">Modify_Custom</h6>
+
+ <ul>
+ <li class="Body">An existing <em class=
+ "Code">Define_Custom</em> section can be modified by using
+ <em class="Code">Modify_Custom</em>. The syntax of the body
+ is identical to that of a <em class=
+ "Code">Define_Custom</em>. The example below shows a
+ modification to the TAO IDL defaults found in <em class=
+ "Code">taoidldefaults.mpb</em> of the TAO+ACE distribution.
+ Everything provided by the <em class=
+ "Code">Define_Custom(IDL)</em> remains unchanged except for
+ the values set within the <em class=
+ "Code">Modify_Custom(IDL).</em></li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project: taoidldefaults {</p>
+
+ <p class="Code">&nbsp;&nbsp;specific(!automake) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;tao_idlflags += -Sc
+ -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;// This allows "make idl_stubs"
+ to work</p>
+
+ <p class="Code">&nbsp;&nbsp;verbatim(gnuace, macros) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_HDR_EXT
+ ?= .h</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_INL_EXT
+ ?= .i</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_SRC_EXT
+ ?= .cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_HDR_EXT
+ ?= _s.h</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_INL_EXT
+ ?= _s.i</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_SRC_EXT
+ ?= _s.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Modify_Custom(IDL) {</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;source_pre_extension = , _s</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;header_pre_extension = , _s</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;inline_pre_extension = , _s</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inline_outputext
+ &nbsp;&nbsp;&nbsp;&nbsp;= .i</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head6">Custom Post Command</h6>
+
+ <ul>
+ <li class="BodyNoLead">When defining a <em class=
+ "Code">postcommand</em> as part of a <em class=
+ "Code">Define_Custom</em>, a few pseudo template variables
+ are available to provide some flexibility. The following
+ table shows the pseudo template variables that can be
+ accessed only from the <em class="Code">postcommand</em>.
+ Please note that <em class="Code">&lt;%</em> and <em class=
+ "Code">%&gt;</em> are part of the syntax.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">Post Command Pseudo
+ Variables</h6>
+
+ <table border="1" summary="Post Command Pseudo Variables">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Variable</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The input file to the
+ command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input_basename%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The basename of the input file to
+ the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input_dirname%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The directory name of the input
+ file to the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The input file to the command
+ with the extension stripped off.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input_ext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This gives the file extension of
+ the input file (if there is one).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file created by the
+ original command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output_basename%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The basename of the output file
+ to the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output_dirname%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The directory name of the output
+ file to the command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file created by the
+ original command with the extension stripped off.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output_ext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This gives the file extension of
+ the output file (if there is one).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">The output file can be referenced
+ as a generic output file, or it can be referenced as
+ a component file using one of the following
+ variables. If it does not match the specific type the
+ value will be empty.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%documentation_file%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it is a
+ documentation file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%header_file%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it has a
+ header file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%inline_file%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it has an
+ inline file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%resource_file%&gt;</em> (<em class=
+ "TableCode">&lt;%resx_file%&gt;</em> for C# and
+ VB)</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it has a
+ resource file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%source_file%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it has a
+ source file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%template_file%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file if it is a
+ template file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%documentation_file_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it is a documentation file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%header_file_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it has a header file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%inline_file_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it has an inline file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%resource_file_noext%&gt;</em>
+ (<em class="TableCode">&lt;%resx_file_noext%&gt;</em>
+ for C# and VB)</p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it has a resource file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%source_file_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it has a source file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%template_file_noext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output file without an
+ extension if it is a template file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">The extensions of the input and
+ output files are also available as pseudo
+ variables.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%input_ext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The extension of the input file
+ (if it has one).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%output_ext%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The extension of the output file
+ (if it has one).</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">&nbsp;</li>
+
+ <li class="Body">The following table describes the pseudo
+ template variables that can be used in the <em class=
+ "Code">command</em>, <em class="Code">commandflags</em>,
+ <em class="Code">dependent</em>, <em class=
+ "Code">output_option</em> and <em class=
+ "Code">postcommand</em> settings.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle"><a name=
+ "Common Pseudo Variables"></a>Common Pseudo Variables</h6>
+
+ <table border="1" summary="Common Pseudo Variables">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Variable</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%and%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform and project
+ non-specific representation of a command conditional
+ and.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%cat%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to print a file to the terminal.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%cmdsep%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A project and platform
+ non-specific command separator which always runs
+ right-hand side of the command. For example, in the
+ following psuedo commmand string, both the <em class=
+ "Code">&lt;%cat%&gt;</em> and <em class=
+ "Code">&lt;%mv%&gt;</em> commands would be run.
+ <em class="Code">&lt;%cat%&gt; &lt;%source_file%&gt;
+ &lt;%gt%&gt; foo &lt;%cmdsep%&gt; &lt;%mv%&gt; foo
+ other_dir</em></p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%cmp%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to compare two files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%cp%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to copy a file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%crlf%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific line
+ ending.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%equote%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A project non-specific escaped
+ double quote.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%gendir%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output directory specified by
+ the <em class="Code">gendir</em> setting. This
+ variable is not available to <em class=
+ "Code">postbuild</em>, <em class=
+ "Code">postclean</em>, or<em class=
+ "Code">prebuild.</em></p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%gt%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform and project
+ non-specific representation of a greater than
+ sign.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%lt%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform and project
+ non-specific representation of a less than sign.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%mkdir%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to make a directory.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%mv%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to move a file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%nul%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific null
+ device.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%or%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform and project
+ non-specific representation of a command conditional
+ or.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%os%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Returns either win32 or unix.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%prj_type%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The project type as supplied
+ by the -type command line option.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%quote%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A project non-specific
+ representation of a double quote.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%rm%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific command
+ to delete a file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%rmdir%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific recursive
+ directory delete command.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%slash%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A platform non-specific directory
+ separator.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%temporary%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">A temporary file name. The
+ generated temporary file name contains no directory
+ portion and is the same for each use within the same
+ variable setting.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="2">
+ <p class="TblCode">The following variables will
+ be set to the known extension for Windows based
+ project types and empty on non-Windows based
+ project types.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%bat%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The extension for batch
+ files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%cmd%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The extension for command
+ files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="TblCode"><em class=
+ "TableCode">&lt;%exe%&gt;</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The extension for executable
+ files.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div>
+ <a name="TheFeatureFile" id="TheFeatureFile"></a>
+
+ <h5 class="Head4">The Feature File</h5>
+
+ <ul>
+ <li class="BodyNoLead">The term feature, as used by MPC,
+ describes different concepts or external software that a project
+ may require in order to build properly. The feature file
+ determines which features are enabled or disabled which has a
+ direct effect on whether or not MPC generates a project.</li>
+
+ <li class="Body">It supports the standard comment (<em class=
+ "Code">//</em> ) and assignment of numbers to feature names.
+ These feature names will correspond to values given to the
+ <em class="Code">requires</em> and <em class="Code">avoids</em>
+ keywords in mpc files.</li>
+
+ <li class="Body">If a feature is not listed in the feature file
+ or is listed with a boolean value of true (1), that feature is
+ enabled. If a feature is listed and has a boolean value of false
+ (0), that feature is disabled.</li>
+
+ <li class="Body">If a feature name is listed in the <em class=
+ "Code">requires</em> value for a particular project and that
+ feature is enabled, that project will be generated. If the
+ feature is not enabled, the project will not be generated.</li>
+
+ <li class="Body">The opposite holds true for the <em class=
+ "Code">avoids</em> keyword. If a feature name is listed in the
+ <em class="Code">avoids</em> value for a project and the feature
+ is disabled, that project will be generated. If the feature is
+ enabled, the project will not be generated.</li>
+
+ <li class="Body">The global feature file for MPC contains the
+ following values.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">boost = 0</p>
+
+ <p class="Code">bzip2 = 0</p>
+
+ <p class="Code">java = 0</p>
+
+ <p class="Code">mfc = 0</p>
+
+ <p class="Code">python = 0</p>
+
+ <p class="Code">qt = 0</p>
+
+ <p class="Code">rpc = 0</p>
+
+ <p class="Code">swig_java = 0</p>
+
+ <p class="Code">swig_perl = 0</p>
+
+ <p class="Code">swig_php = 0</p>
+
+ <p class="Code">swig_python = 0</p>
+
+ <p class="Code">swig_ruby = 0</p>
+
+ <p class="Code">swig_tcl = 0</p>
+
+ <p class="Code">uses_wchar = 0</p>
+
+ <p class="Code">xalan = 0</p>
+
+ <p class="Code">xerces = 0</p>
+
+ <p class="Code">xerces2 = 0</p>
+
+ <p class="Code">xerces3 = 0</p>
+
+ <p class="Code">ziparchive = 0</p>
+
+ <p class="Code">zlib = 0</p>
+
+ <p class="Code">zzip = 0</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">In the above contents, all of these features are
+ disabled for each project generated. If these values do not suit
+ your needs, then you must do one of the following:</li>
+
+ <li class="BodyNoLead">
+ <ul>
+ <li>Create a project specific feature file in the <em class=
+ "Code">config</em> directory (ex., <em class=
+ "Code">make.features</em> for the <em class="Code">make</em>
+ project type) to set features for a particular project
+ type.</li>
+
+ <li>Create a <em class="Code">default.features</em> file in
+ the <em class="Code">config</em> directory that contains the
+ feature set you need. These will be applied to all project
+ types.</li>
+
+ <li>Create a feature file anywhere you like with the features
+ you want and use the <em class="Code">-feature_file</em>
+ option to specify the location.</li>
+
+ <li>Use the <em class="Code">-features</em> option to
+ dynamically modify the feature settings.</li>
+ </ul>
+ </li>
+
+ <li class="Body">Generated projects will have a combination of
+ features specified in the <em class="Code">global.features</em>
+ file as well as in your feature file. Therefore, if a feature is
+ disabled in the global file and you want to enable it, you must
+ explicitly enable it in your feature file.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Feature Projects</h5>
+
+ <ul>
+ <li class="BodyNoLead">A feature project contains information as
+ a project would, but can only be a base project and will only be
+ added to a sub project if the features that it requires are
+ enabled or the features that it avoids are disabled.</li>
+
+ <li class="Body">A feature definition requires at least one
+ feature name. A name by itself specifies that the feature must be
+ enabled. A &rsquo;!&rsquo; in front of the feature name indicates
+ that the feature must be disabled. There may be more than one
+ comma separated feature listed between the parenthesis.</li>
+
+ <li class="Body">The following example show how to declare a
+ feature project.</li>
+
+ <li class="Body">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// ziparchive.mpb</p>
+
+ <p class="Code">feature(ziparchive) {</p>
+
+ <p class="Code">&nbsp;&nbsp;includes += $(ZIPARCHIVEROOT)</p>
+
+ <p class="Code">&nbsp;&nbsp;libpaths +=
+ $(ZIPARCHIVEROOT)/lib</p>
+
+ <p class="Code">&nbsp;&nbsp;libs &nbsp;&nbsp;&nbsp;&nbsp;+=
+ ziparch</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">With this example, any project that inherits
+ from the <em class="Code">ziparchive</em> base feature project
+ will contain the project information only if the <em class=
+ "Code">ziparchive</em> feature is enabled.</li>
+ </ul>
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">Defaults</h4>
+
+ <ul>
+ <li class="BodyNoLead">MPC has been designed to minimize the amount
+ of maintenance that goes into keeping build tool files up-to-date
+ with the project. If your source code is organized <em class=
+ "Emphasis">properly</em>, the maintenance of your mpc files should
+ be minimal.</li>
+
+ <li class="Body">With the use of inheritance and proper code
+ arrangement, an mpc file for a TAO related project may be as simple
+ as:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project: taoserver {</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">This project definition could be used to generate
+ a project for a TAO server with multiple idl, header and source
+ files.</li>
+
+ <li class="Body">The idea of <em class="Emphasis">proper</em>
+ source layout is basically summarized as <em class="Emphasis">one
+ directory per binary target.</em> If only the files that pertain to
+ a single target are located in the directory with the mpc file,
+ then the MPC defaults will satisfy most project needs.</li>
+
+ <li class="Body">Of course, it will not always be possible or
+ desirable to organize your project code in this fashion, so all
+ defaulting behavior can be overridden. The next sections describe
+ the default behaviors of MPC and how to override them.</li>
+ </ul>
+
+ <div>
+ <h5 class="Head4">Source Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">New source files are added and others are
+ removed quite often in a developing project. If the <em class=
+ "Code">Source_Files</em> component is left out of an mpc file,
+ then MPC will assume that any file matching one of the <em class=
+ "Emphasis">source</em> extensions is to be included in the
+ project. For most project types, the source extensions are:
+ <em class="Code">.cpp</em>, <em class="Code">.cxx</em>,
+ <em class="Code">.cc</em>, <em class="Code">.c</em> and
+ <em class="Code">.C</em>. Only the following extensions are
+ considered source extensions: <em class="Code">.cpp</em>,
+ <em class="Code">.cxx</em> and <em class="Code">.c</em> for the
+ <em class="Code">em3</em> and <em class="Code">vc6</em> project
+ types as eMbedded Visual C++ and Visual C++ 6.0 do not understand
+ files with the <em class="Code">.cc</em> or <em class=
+ "Code">.C</em> extension.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Template Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">MPC assumes that any file matching one of
+ the <em class="Emphasis">template</em> extensions is to be
+ included in the project if the <em class=
+ "Code">Template_Files</em> component is left out of an mpc file.
+ For most project types, the template extensions are: <em class=
+ "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>, <em class=
+ "Code">_T.cc</em>, <em class="Code">_T.c</em>, and <em class=
+ "Code">_T.C</em>. However, only the <em class="Code">_T.cpp</em>
+ and <em class="Code">_T.cxx</em> extensions are considered
+ template extensions for the <em class="Code">em3</em> and
+ <em class="Code">vc6</em> project types.</li>
+
+ <li class="Body">If the <em class="Code">Source_Files</em>
+ component is defaulted, and a file is explicitly listed in the
+ Template_Files section that happens to appear to MPC as a source
+ file (i.e., has a source file extension, but does not have
+ <em class="Code">_T</em> directly before it), MPC will
+ automatically exclude it from the <em class=
+ "Code">Source_Files</em> component.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Inline Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">As with source files, the <em class=
+ "Code">Inline_Files</em> component can be left out of an mpc file
+ to allow it to generate defaults. Files that match the <em class=
+ "Code">.i</em> and <em class="Code">.inl</em> extensions are
+ considered inline files.</li>
+
+ <li class="Body">The <em class="Code">Inline_Files</em> component
+ has a special interaction with the <em class=
+ "Code">Source_Files</em> component. If the <em class=
+ "Code">Source_Files</em> component has files listed and the
+ <em class="Code">Inline_Files</em> component is omitted, then
+ each source file is <em class="Emphasis">matched</em> to an
+ inline file. If the matching inline file is found or would be
+ generated from a custom command, it is added to the <em class=
+ "Code">Inline_Files</em> component list.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Header Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">As with source files, the <em class=
+ "Code">Header_Files</em> component can be left out of an mpc file
+ to allow it to generate defaults. Files that match the <em class=
+ "Code">.h</em>, <em class="Code">.hpp</em>, <em class=
+ "Code">.hxx</em>, and <em class="Code">.hh</em> extensions are
+ considered header files.</li>
+
+ <li class="Body">The <em class="Code">Header_Files</em> component
+ has a special interaction with the <em class=
+ "Code">Source_Files</em> component. If the <em class=
+ "Code">Source_Files</em> component has files listed and the
+ <em class="Code">Header_Files</em> component is omitted, then
+ each source file is <em class="Emphasis">matched</em> to a header
+ file. If the matching header file is found or would be generated
+ from a custom command, then it is added to the <em class=
+ "Code">Header_Files</em> component list.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Documentation Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">The <em class=
+ "Code">Documentation_Files</em> component, if omitted, will
+ default to all files that end in the following: <em class=
+ "Code">README</em>, <em class="Code">readme</em>, <em class=
+ "Code">.doc</em>, <em class="Code">.html</em> and <em class=
+ "Code">.txt</em>.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Resource Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">Resource_Files</em>
+ component, if omitted, will default to only the files that end in
+ <em class="Code">.rc</em> and are similar to the name of the
+ project. For example, if a directory contains three <em class=
+ "Code">.rc</em> files and the project name is <em class=
+ "Code">foo</em>, only the <em class="Code">.rc</em> files that
+ contain the word <em class="Code">foo</em> will automatically be
+ added to the <em class="Code">Resource_Files</em> component
+ list.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Custom Defined Files</h5>
+
+ <ul>
+ <li class="BodyNoLead">The <em class="Code">Custom Defined
+ Files</em> components have a special interaction with the
+ <em class="Code">Source_Files</em> component. If the custom
+ command generates source files and has the <em class=
+ "Code">automatic_out</em> setting set to 1, they will
+ automatically be added to the <em class="Code">Source_Files</em>
+ component list. If any of the files listed in the <em class=
+ "Code">Source_Files</em> components list match any of the
+ generated source file names, then none of the generated source
+ file names will be automatically added to the <em class=
+ "Code">Source_Files</em> components list.</li>
+ </ul>
+ </div>
+
+ <div>
+ <a name="ExampleMPCFile" id="ExampleMPCFile"></a>
+
+ <h5 class="Head4">Example MPC File</h5>
+
+ <ul>
+ <li class="BodyNoLead">The example below uses the directory
+ contents of <em class=
+ "Code">$TAO_ROOT/orbsvcs/performance-tests/RTEvent/lib</em> to
+ illustrate the simplicity of mpc files:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Auto_Disconnect.cpp Loopback_Supplier.h
+ RTEC_Initializer.cpp</p>
+
+ <p class="Code">Auto_Disconnect.h Low_Priority_Setup.cpp
+ RTEC_Initializer.h</p>
+
+ <p class="Code">Auto_Disconnect.inl Low_Priority_Setup.h
+ rtec_perf_export.h</p>
+
+ <p class="Code">Auto_Functor.cpp Low_Priority_Setup.inl
+ RTEC_Perf.mpc</p>
+
+ <p class="Code">Auto_Functor.h Makefile RTPOA_Setup.cpp</p>
+
+ <p class="Code">Auto_Functor.inl ORB_Holder.cpp
+ RTPOA_Setup.h</p>
+
+ <p class="Code">Client_Group.cpp ORB_Holder.h
+ RTPOA_Setup.inl</p>
+
+ <p class="Code">Client_Group.h ORB_Holder.inl
+ RTServer_Setup.cpp</p>
+
+ <p class="Code">Client_Group.inl ORB_Shutdown.cpp
+ RTServer_Setup.h</p>
+
+ <p class="Code">Client_Options.cpp ORB_Shutdown.h
+ RTServer_Setup.inl</p>
+
+ <p class="Code">Client_Options.h ORB_Shutdown.inl
+ Send_Task.cpp</p>
+
+ <p class="Code">Client_Pair.cpp ORB_Task_Activator.cpp
+ Send_Task.h</p>
+
+ <p class="Code">Client_Pair.h ORB_Task_Activator.h
+ Send_Task_Stopper.cpp</p>
+
+ <p class="Code">Client_Pair.inl ORB_Task_Activator.inl
+ Send_Task_Stopper.h</p>
+
+ <p class="Code">Consumer.cpp ORB_Task.cpp
+ Send_Task_Stopper.inl</p>
+
+ <p class="Code">Consumer.h ORB_Task.h Servant_var.cpp</p>
+
+ <p class="Code">Control.cpp ORB_Task.inl Servant_var.h</p>
+
+ <p class="Code">Control.h Peer_Base.cpp Servant_var.inl</p>
+
+ <p class="Code">EC_Destroyer.cpp Peer_Base.h Shutdown.cpp</p>
+
+ <p class="Code">EC_Destroyer.h PriorityBand_Setup.cpp
+ Shutdown.h</p>
+
+ <p class="Code">EC_Destroyer.inl PriorityBand_Setup.h
+ Shutdown.inl</p>
+
+ <p class="Code">Federated_Test.idl PriorityBand_Setup.inl
+ Supplier.cpp</p>
+
+ <p class="Code">Implicit_Deactivator.cpp RIR_Narrow.cpp
+ Supplier.h</p>
+
+ <p class="Code">Implicit_Deactivator.h RIR_Narrow.h
+ SyncScope_Setup.cpp</p>
+
+ <p class="Code">Implicit_Deactivator.inl RT_Class.cpp
+ SyncScope_Setup.h</p>
+
+ <p class="Code">Loopback_Consumer.cpp RT_Class.h
+ SyncScope_Setup.inl</p>
+
+ <p class="Code">Loopback_Consumer.h RT_Class.inl
+ TAO_RTEC_Perf.dsp</p>
+
+ <p class="Code">Loopback.cpp RTClient_Setup.cpp
+ TAO_RTEC_Perf.dsw</p>
+
+ <p class="Code">Loopback.h RTClient_Setup.h
+ Task_Activator.cpp</p>
+
+ <p class="Code">Loopback_Pair.cpp RTClient_Setup.inl
+ Task_Activator.h</p>
+
+ <p class="Code">Loopback_Pair.h RTCORBA_Setup.cpp
+ Task_Activator.inl</p>
+
+ <p class="Code">Loopback_Pair.inl RTCORBA_Setup.h</p>
+
+ <p class="Code">Loopback_Supplier.cpp RTCORBA_Setup.inl</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The following mpc file (<em class=
+ "Code">RTEC_Perf.mpc</em> ) shows the simple and small number of
+ lines required to generate usable build tool project files.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent,
+ minimum_corba {</p>
+
+ <p class="Code">&nbsp;&nbsp;sharedname = TAO_RTEC_Perf</p>
+
+ <p class="Code">&nbsp;&nbsp;idlflags +=
+ -Wb,export_macro=TAO_RTEC_Perf_Export \</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Wb,export_include=rtec_perf_export.h</p>
+
+ <p class="Code">&nbsp;&nbsp;dllflags +=
+ TAO_RTEC_PERF_BUILD_DLL</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;Template_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Disconnect.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Functor.cpp</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;Low_Priority_Setup.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;RIR_Narrow.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Servant_var.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Shutdown.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Task_Activator.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">A line-by-line explanation of the example mpc
+ file is listed below.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent,
+ minimum_corba {</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The first line declares a project named
+ <em class="Code">RTEC_Perf</em> that inherits from the base
+ projects listed after the colon.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sharedname = TAO_RTEC_Perf</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Line two determines that the project is a
+ library and the library name is <em class=
+ "Code">TAO_RTEC_Perf</em>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">idlflags +=
+ -Wb,export_macro=TAO_RTEC_Perf_Export \</p>
+
+ <p class="Code">-Wb,export_include=rtec_perf_export.h</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Lines three and four add to the flags passed to
+ the IDL compiler when processing the idl files.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Line five adds <em class=
+ "Code">TAO_RTEC_PERF_BUILD_DLL</em> to the <em class=
+ "Code">dllflags</em>, which defines a macro that is used by the
+ <em class="Code">rtec_perf_export.h</em> header file.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Template_Files {</p>
+
+ <p class="Code">&nbsp;&nbsp;Auto_Disconnect.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Auto_Functor.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Low_Priority_Setup.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;RIR_Narrow.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Servant_var.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Shutdown.cpp</p>
+
+ <p class="Code">&nbsp;&nbsp;Task_Activator.cpp</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Lines 7 through 15 name the listed cpp files as
+ part of the <em class="Code">Template_Files</em>.</li>
+
+ <li class="Body">You may have noticed that there isn&rsquo;t much
+ to the file above. With the default behaviors that are built into
+ MPC, there does not need to be. We rely on the defaults to
+ determine the values of <em class="Code">IDL_Files</em>,
+ <em class="Code">Source_Files</em>, <em class=
+ "Code">Inline_Files</em> , and <em class=
+ "Code">Header_Files</em>. Since the template files do not match
+ the MPC built-in defaults, we must explicitly list them. We also
+ rely on inheritance to get many of the TAO-related options.</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div>
+ <h3 class="Head2">Adding a New Type</h3>
+ <hr>
+
+ <ul>
+ <li class="Body">If MPC does not support a particular build tool, you
+ may want to consider adding a new project type. For instance, support
+ could be added to MPC for Boost Jam, Xcode and many others. To do so
+ will require knowledge of the MPC input files, as well as Object
+ Oriented Perl.</li>
+ </ul>
+
+ <div>
+ <h4 class="Head3">Input File Syntax</h4>
+
+ <ul>
+ <li class="BodyNoLead">This section describes the syntax of the
+ files that are used during project generation.</li>
+ </ul>
+
+ <div>
+ <h5 class="Head4"><a name="MPD Syntax"></a>Template Files
+ (mpd)</h5>
+
+ <ul>
+ <li class="BodyNoLead">Template files make up the bulk of what
+ MPC puts into each generated project file. They provide the plain
+ text and the layout of the data provided by the mpc files, using
+ various template directives.</li>
+
+ <li class="Body">Template directives are declared using a
+ <em class="Code">&lt;% %&gt;</em> construct. This construct is
+ used to create if statements, for loops and to access variables.
+ One thing to note is that any text, including white space, that
+ is not enclosed within <em class="Code">&lt;% %&gt;</em> is left
+ untouched and is passed directly into the generated project
+ file.</li>
+
+ <li class="Body">An <em class="Code">if</em> statement can appear
+ on a single line or it can span multiple lines. For example, the
+ following line:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%if(exename)%&gt;BIN =
+ &lt;%exename%&gt;&lt;%else%&gt;LIB =
+ &lt;%sharedname%&gt;&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">is equivalent to:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%if(exename)%&gt;</p>
+
+ <p class="Code">BIN = &lt;%exename%&gt;</p>
+
+ <p class="Code">&lt;%else%&gt;</p>
+
+ <p class="Code">LIB = &lt;%sharedname%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body"><a name="foreach syntax"></a> A <em class=
+ "Code">foreach</em> statement can also appear on a single line or
+ can span multiple lines. As described below in the keywords
+ section, the <em class="Code">foreach</em> statement evaluates
+ the variable in a space-separated list context.</li>
+
+ <li class="Body">There are a couple of ways to write a <em class=
+ "Code">foreach</em> loop. The first and preferred way is to name
+ the loop variable and then list each variable to be
+ evaluated.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">FILES=&lt;%foreach(fvar, idl_files source_files
+ header_files)%&gt; &lt;%fvar%&gt;&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The second way is to let the <em class=
+ "Code">foreach</em> statement determine the loop variable. With
+ this style, each value can be accessed via the first variable
+ name passed to the <em class="Code">foreach</em> with the
+ trailing &rsquo;<em class="Code">s</em> &rsquo; removed.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">FILES=&lt;%foreach(idl_files source_files
+ header_files)%&gt; &lt;%idl_file%&gt;&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Note that the <em class=
+ "Code">&lt;%idl_file%&gt;</em> variable will contain each
+ individual value of the <em class="Code">idl_files</em>,
+ <em class="Code">source_files</em> and <em class=
+ "Code">header_files</em> list. If the variable in the <em class=
+ "Code">foreach</em> does not end in &rsquo;<em class=
+ "Code">s</em> &rsquo;, the variable of the same name within the
+ <em class="Code">foreach</em> will contain each individual value,
+ e.g.,</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%foreach(filelist)%&gt;
+ &lt;%filelist%&gt;&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The following table lists keywords that can
+ appear in template files.</li>
+
+ <li style="list-style: none">
+ <a name="38037"></a>
+
+ <h6 class="NumberedTableTitle">Template File Keywords</h6>
+
+ <table border="1" summary="Template File Keywords">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Keyword</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">basename</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Evaluates the variable name and
+ removes the directory portion from that value.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">basenoextension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is similar to <em class=
+ "Code">basename</em> except that the extension is also
+ removed from the variable name value.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">comment</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The value passed to comment is
+ ignored and can be any set of characters, except a new
+ line or a closing parenthesis.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">compares</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns true if the
+ variable value (first parameter) is equal to the string
+ value (second parameter).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">contains</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns true if the
+ variable value (first parameter) contains the regular
+ expression (second parameter).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">dirname</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Evaluates the variable name and
+ removes the <em class="Code">basename</em> from that
+ value.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">duplicate_index</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns a number based
+ on the number of times a file with the same name (but
+ different directory) is seen within a project. The
+ function returns false upon the first occurrence of a
+ file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">else</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with the <em class=
+ "Code">if</em> statement. An <em class="Code">else</em>
+ block will be evaluated if the statement does not
+ evaluate to true.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">endfor</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with <em class=
+ "Code">foreach</em>. This ends <em class=
+ "Code">foreach</em> block.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">endif</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with the <em class=
+ "Code">if</em> statement. This ends an <em class=
+ "Code">if</em> or <em class="Code">if/else</em>
+ block.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">ends_with</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns true if the
+ variable value (first parameter) ends with the regular
+ expression (second parameter).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">eval</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is similar to eval in perl. The
+ template code passed to this function will be evaluated
+ within the context of the current template.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">extensions</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Returns a list of extensions based on
+ the component name parameter (e.g., source_files,
+ header_files, etc.)</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">flag_overrides</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is directly related to
+ overriding the project-wide settings in an mpc file. It
+ takes two variable names that are comma separated. The
+ first corresponds to a file name and the second is any
+ variable name.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">foreach</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The given variable names are
+ evaluated in a list context which is space separated.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">forfirst</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">forfirst</em> will be placed on the
+ first iteration of <em class="Code">foreach</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">forlast</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">forlast</em> will be placed on the last
+ iteration of <em class="Code">foreach</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">fornotfirst</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">fornotfirst</em> will be placed on each
+ iteration of <em class="Code">foreach</em> except for the
+ first.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">fornotlast</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used with <em class=
+ "Code">foreach</em>. The literal value passed to
+ <em class="Code">fornotlast</em> will be placed on each
+ iteration of <em class="Code">foreach</em> except for the
+ last.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">full_path</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Returns full path of the value of the
+ variable name passed a the parameter.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">has_extension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Returns true is the variable value
+ has a file extension.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">if</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Used to determine if a variable is
+ defined. The not operator (<em class="Code">!</em> ) can
+ be used to invert the if check. This construct will only
+ check for values defined within an mpc or mpt file.
+ Default values (even those implemented by the project
+ creators) are not considered in the <em class=
+ "Code">if</em> statement.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">keyname_used</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function is used to associate a
+ key with a variable value. If the key has been associated
+ with a variable value more than once, either through
+ physical repetition of the key in the template or through
+ evaluation of a foreach context, the count of association
+ will be appended to the output.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">lc</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Return the given variable value in
+ all lower case characters.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">marker</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is directly related to the
+ <em class="Code">verbatim</em> keyword from the mpc
+ syntax. This can be used to designate markers within a
+ template. Ex. <em class=
+ "Code">&lt;%marker(local)%&gt;</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">multiple</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns true if the
+ array parameter contains multiple values.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">noextension</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Evaluates the variable name value as
+ a file name and removes the extension from that value
+ including the period.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">normalize</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Convert spaces, dashes, slashes,
+ dollar signs, parenthesis and dots in the given variable
+ value to underscores.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">remove_from</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function will remove a file in a
+ component list. It requires three parameters. The first
+ parameter is a component name (e.g., Source_Files), the
+ second parameter is a regular expression pattern and
+ the third parameter is a project or template variable
+ name. The fourth and optional parameter allows you to
+ alter the project or template variable value by
+ removing the end matching portion. If the value of
+ the project or template variable (i.e., parameter
+ three) after being modified by parameter four and
+ having the regular expression pattern (i.e.,
+ parameter two) appended to it matches any value
+ within the compent list (named by parameter one), it
+ will be removed from that component list and passed
+ back.
+ any </p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">reverse</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function reverses the order of
+ the array parameter values.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">scope</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This is used to set the scope of
+ execution of a function that will operate on the template
+ output. A scope is begun by passing "enter" as the first
+ parameter and a function name as the second parameter.
+ Currently, the only function name supported is "escape".
+ The third parameter specifies a string on which the
+ function will operate. Any template text that matches the
+ string parameter while within this scope will be
+ transformed by the function parameter. A scope is then
+ ended by passing "leave".</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">sort</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function sorts the array
+ parameter values.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">starts_with</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns true if the
+ variable value (first parameter) starts with the regular
+ expression (second parameter).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">transdir</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Replaces values within the directory
+ portion of a variable value with something that can be
+ used as a relative path. The current working directory is
+ removed and ".." is replaced with "dotdot".</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">uc</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Return the given variable value in
+ all upper case characters.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">ucw</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Return the given variable value with
+ the first letter of each word in upper case. Words are
+ separated by spaces or underscores.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">uniq</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This function returns the unique set
+ of the array parameter values.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">The following table lists special names that can
+ be used as variables in some template files. The variables listed
+ in the <a href=
+ "MakeProjectCreator.html#Common%20Pseudo%20Variables" class=
+ "XRef">Common Pseudo Variables</a> table can be used as well
+ (except for <em class="Code">&lt;%temporary%&gt;</em>).</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">Special Values used in Template
+ Files</h6>
+
+ <table border="1" summary=
+ "Special Values used in Template Files">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Value</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">am_version</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Implemented by the Automake project
+ creator module, converts the <em class=
+ "Code">version</em> setting into a suitable value for
+ automake.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">ciao</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Implemented by the GNUACE project
+ creator module, specifies that the project uses CIAO.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">compilers</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Implemented by the Make project
+ creator module, provides the compiler name based on the
+ current project language.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">cppdir</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the
+ BMake project creator module. It returns a semicolon
+ separated list of directories taken from each value in
+ the <em class="Code">Source_Files</em> list.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">custom_types</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Contains a list of the custom build
+ types. See <a href=
+ "MakeProjectCreator.html#Custom%20Types" class=
+ "XRef">Custom Types</a> for more details.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">cwd</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The full current working
+ directory.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">forcount</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This only has a value within the
+ context of a <em class="Code">foreach</em> and provides a
+ 1 based count, by default, of the index of the elements
+ in <em class="Code">foreach</em>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">guid</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the VC7
+ and WIX project creator modules. It returns a <em class=
+ "Code">guid</em> value based on the project that is
+ usable within VC7, VC71, VC8, VC9, VC10 and WIX project
+ files.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">language</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the VC7
+ and Make project creator modules. It returns the current
+ language setting for the project.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">make_file_name</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the VC6
+ and EM3 project creator modules. It returns the project
+ name with the make file extension that corresponds to the
+ particular project type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">project_file</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This variable contains the name of
+ the output file for the current project being
+ generated.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">project_name</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This variable contains the name of
+ the current project being generated.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">rcdir</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the
+ BMake project creator module. It returns a semicolon
+ separated list of directories taken from each value in
+ the <em class="Code">Resource_Files</em> list.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_directory</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the WIX
+ project creator module. It converts the variable portion
+ of the binary output directory (either <em class=
+ "Code">exeout</em>, <em class="Code">dllout</em>, or
+ <em class="Code">libout</em>) to a suitable value for
+ WIX.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">tao</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">Implemented by the GNUACE project
+ creator module, specifies that the project uses TAO.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">vcversion</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the
+ VC7ProjectCreator. It returns the version number of the
+ type of project being generated. 7.00 is return for vc7,
+ 7.10 is return for vc71 and 8.00 is returned for vc8,
+ 9.00 is returned for vc9, 10.00 is returned for vc10.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class="TableCode">vpath</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">This value is implemented by the
+ GNUACEProjectCreator. It returns a value, based on the
+ location of the source files, that specifies the
+ <em class="Code">VPATH</em> setting for GNU Make.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+ </ul>
+
+ <ul>
+ <li class="Body">
+ <h6 class="Head5"><a name="Document Template Script"></a>
+ Template Variable Documentation</h6>
+ </li>
+
+ <li class="Body">Template variables used within the MPC templates
+ are numerous and vary from template to template; there are far
+ too many to include in this document. However, you can generate
+ an HTML document containing all of the template variables used
+ within a template using the <em class=
+ "Code">document_template.pl</em> script found in the <em class=
+ "Code">devtools</em> directory under the MPC root directory. You
+ may find that some templates and individual template variables
+ are well documented and, unfortunately, some are not.</li>
+
+ <li class="Body">The script will generate documentation for an
+ individual template file. The usage is as follows:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">document_template.pl v1.3</p>
+
+ <p class="Code">Usage: document_template.pl &lt;template&gt;
+ [&lt;html output&gt; [language]]</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">html output - This defaults to the name of the
+ template file with the .mpd</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extension replaced with
+ .html.</p>
+
+ <p class="Code">language &nbsp;&nbsp;&nbsp;- This defaults to
+ the language for which the template is designed.</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It can be any of the valid
+ language settings for MPC:</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cplusplus csharp java
+ vb</p>
+ </li>
+ </ul>
+
+ <div>
+ <a name="Custom Types"></a>
+
+ <h6 class="Head5">Custom Types</h6>
+
+ <ul>
+ <li class="BodyNoLead">To support multiple custom build types,
+ a special keyword was introduced. The <em class=
+ "Code">custom_types</em> keyword is used to access the list of
+ custom types defined by the user. In a <em class=
+ "Code">foreach</em> context, each custom type can be accessed
+ through the <em class="Code">custom_type</em> keyword.</li>
+
+ <li class="Body">A variety of information is available from
+ each <em class="Code">custom_type</em> through the <em class=
+ "Code">-&gt;</em> operator. The input files, input extensions,
+ command, command output option, command flags, and output file
+ directory are all accessible through the field names that
+ correspond to the particular type.</li>
+
+ <li class="Body">The input files associated with the custom
+ type are accessed through <em class=
+ "Code">custom_type-&gt;input_files</em>. Each input file has a
+ set of output files associated with it which can be accessed in
+ a <em class="Code">foreach</em> context through c<em class=
+ "Code">ustom_type-&gt;input_file-&gt;output_files</em>. The
+ custom type fields are those listed in the <a href=
+ "MakeProjectCreator.html#32899" class="XRef">Define_Custom
+ Keywords</a> table as well as those listed in the following
+ table.</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">Custom Type Fields</h6>
+
+ <table border="1" summary="Custom Type Fields">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Value</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">dependencies</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The files on which the processing
+ of the custom input file depends.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">gendir</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The output directory associated
+ with a particular input file. This field has no meaning
+ when accessed directly through the <em class=
+ "Code">custom_type</em>. It should always be used
+ within the context of a <em class=
+ "Code">flag_overrides</em> (see <a href=
+ "MakeProjectCreator.html#38037" class="XRef">Template
+ File Keywords</a>).</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">input_files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The input files associated with the
+ custom type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">inputexts</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The input file extensions
+ associated with the custom type.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">non_source_output_files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">All output files generated from the
+ custom input file that are not considered source code
+ files by MPC.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">output_files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">All output files generated from the
+ custom input file.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">source_output_files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">All output files generated from the
+ custom input file that are considered source code files
+ by MPC.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">The example below, which creates generic
+ makefile rules for building custom input files, shows basic use
+ of the custom type and the various fields that can be accessed.
+ The main limitation with the <em class="Code">custom_types</em>
+ keyword, as can be seen below, is that the <em class=
+ "Code">foreach</em> variable cannot be named as stated <a href=
+ "MakeProjectCreator.html#foreach%20syntax" class=
+ "XRef">previously</a>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%if(custom_types)%&gt;</p>
+
+ <p class="Code">&lt;%foreach(custom_types)%&gt;</p>
+
+ <p class="Code">
+ &lt;%foreach(custom_type-&gt;input_files)%&gt;</p>
+
+ <p class="Code">
+ &lt;%foreach(custom_type-&gt;input_file-&gt;output_files)%&gt;</p>
+
+ <p class="Code">
+ &lt;%custom_type-&gt;input_file-&gt;output_file%&gt;:
+ &lt;%custom_type-&gt;input_file%&gt;</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%custom_type-&gt;command%&gt;
+ &lt;%custom_type-&gt;commandflags%&gt; $@</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h6 class="Head5">Grouped Files</h6>
+
+ <ul>
+ <li class="BodyNoLead">File grouping is part of the syntax of
+ mpc files. If a set of files are grouped within the mpc file,
+ they can be accessed as a group within the mpd file.</li>
+
+ <li class="Body">Files (such as <em class=
+ "Code">Source_Files</em>, <em class="Code">Header_Files</em> )
+ can be grouped together as shown <a href=
+ "MakeProjectCreator.html#MPC%20grouping%20example" class=
+ "XRef">here</a>. Within the mpd file, the different components
+ can be accessed by prepending <em class="Code">grouped_</em> to
+ the component (<em class="Code">grouped_source_files</em>,
+ <em class="Code">grouped_header_files</em>, etc.)</li>
+
+ <li style="list-style: none">
+ <h6 class="NumberedTableTitle">Grouped Files Field Names</h6>
+
+ <table border="1" summary="Grouped Files Field Names">
+ <tr>
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Field Name</p>
+ </th>
+
+ <th rowspan="1" colspan="1">
+ <p class="Tbl-Heading">Description</p>
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">files</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The input files associated with the
+ group.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body"><em class=
+ "TableCode">component_name</em></p>
+ </td>
+
+ <td rowspan="1" colspan="1">
+ <p class="Tbl-Body">The name of the set of multiple
+ groups of files.</p>
+ </td>
+ </tr>
+ </table>
+ </li>
+
+ <li class="Body">The example below, which creates make macros
+ for each file group, shows basic use of grouping and the fields
+ that can be accessed. The main limitation with file grouping,
+ as can be seen below, is that the <em class="Code">foreach</em>
+ variable cannot be named as stated <a href=
+ "MakeProjectCreator.html#foreach%20syntax" class=
+ "XRef">previously</a>. The following example involves source
+ files, but any of the <a href="MakeProjectCreator.html#16907"
+ class="XRef">components</a> listed in the mpc and mpb section
+ can be used.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%if(grouped_source_files)%&gt;</p>
+
+ <p class="Code">&lt;%comment(Get back each set of grouped
+ files)%&gt;</p>
+
+ <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
+
+ <p class="Code">&lt;%comment(This will provide the name of
+ the group)%&gt;</p>
+
+ <p class="Code">&lt;%grouped_source_file%&gt; = \</p>
+
+ <p class="Code">&lt;%comment(Get all the source files in a
+ single group)%&gt;</p>
+
+ <p class="Code">
+ &lt;%foreach(grouped_source_file-&gt;files)%&gt;</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file-&gt;file)%&gt;&lt;%fornotlast("
+ \\")%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">ifndef
+ &lt;%grouped_source_files-&gt;component_name%&gt;</p>
+
+ <p class="Code">
+ &lt;%grouped_source_files-&gt;component_name%&gt; = \</p>
+
+ <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file%&gt;&lt;%fornotlast("
+ \\")%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">endif</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <div>
+ <h5 class="Head4">Template Input Files (mpt)</h5>
+
+ <ul>
+ <li class="BodyNoLead">Template input files provide build tool
+ specific information that is common to all projects, such as
+ compiler switches, intermediate directories, compiler macros,
+ etc. Each project type can provide template input files for
+ dynamic libraries, static libraries, dynamic executables and
+ static executables. However, none of these are actually required
+ by MPC.</li>
+
+ <li class="Body">The template input files are more free-form than
+ the other MPC file types. It is similar to the mpc syntax except
+ that there is no project definition and there is only one
+ keyword. The keyword, <em class="Code">conditional_include</em>,
+ is used to include other mpt files if they can be found in the
+ MPC include search path. If the name listed in double quotes
+ after <em class="Code">conditional_include</em> is not found, it
+ is ignored and no warning is produced. The <em class=
+ "Code">mpt</em> extension is automatically added to the name
+ provided.</li>
+
+ <li class="Body">The template input files contain variable
+ assignments and collections of variable assignments. A variable
+ assignment is of the form:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">variable_name = value1 "value 2"</p>
+
+ <p class="Code">variable_name += another_value</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">This variable can then be used within the
+ corresponding mpd file.</li>
+
+ <li class="Body">Variable assignments can be grouped together and
+ named within the mpt file and used as scoped variables within the
+ mpd file. The following example shows the use of collections of
+ variable assignments.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// mpt file</p>
+
+ <p class="Code">configurations = Release Debug</p>
+
+ <p class="Code">common_defines = WIN32 _CONSOLE</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Release {</p>
+
+ <p class="Code">&nbsp;&nbsp;compile_flags = /W3 /GX /O2 /MD
+ /GR</p>
+
+ <p class="Code">&nbsp;&nbsp;defines = NDEBUG</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Debug {</p>
+
+ <p class="Code">&nbsp;&nbsp;compile_flags = /W3 /Gm /GX /Zi /Od
+ /MDd /GR /Gy</p>
+
+ <p class="Code">&nbsp;&nbsp;defines = _DEBUG</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">conditional_include "vcfullmacros"</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Below is the portion of the mpd file that would
+ use the information provided in the mpt file above.</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%foreach(configurations)%&gt;</p>
+
+ <p class="Code">Name = &lt;%configuration%&gt;</p>
+
+ <p class="Code">&lt;%compile_flags%&gt;&lt;%foreach(defines
+ common_defines)%&gt; /D &lt;%define%&gt;=1&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The following output is generated from the above
+ example:</li>
+
+ <li style="list-style: none">
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Name = Release</p>
+
+ <p class="Code">/W3 /GX /O2 /MD /GR /D NDEBUG=1 /D WIN32=1 /D
+ _CONSOLE=1</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">Name = Debug</p>
+
+ <p class="Code">/W3 /Gm /GX /Zi /Od /MDd /GR /Gy /D _DEBUG=1 /D
+ WIN32=1 /D _CONSOLE=1</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">If a <em class="Code">foreach</em> variable
+ value corresponds to a variable group name, that variable group
+ is available within the scope of that <em class=
+ "Code">foreach</em>.</li>
+
+ <li class="Body">&nbsp;</li>
+ </ul>
+ </div>
+ </div>
+
+ <div>
+ <h4 class="Head3">A Simple Example</h4>
+
+ <ul>
+ <li class="BodyNoLead">We will discuss what it would take to add
+ support for a fictional build tool throughout this section. The
+ <a href="MakeProjectCreator.html#Figure%201-2" class=
+ "XRef">Generating projects with mpc.pl diagram</a> shows the
+ relationship between the template and project creator discussed
+ below.</li>
+ </ul>
+
+ <div>
+ <h5 class="Head4">Template</h5>
+
+ <ul>
+ <li class="BodyNoLead">The best thing to do is to start with the
+ template. The template is the most important piece when adding a
+ new project type. It basically tells MPC how to lay out all of
+ the information it gathers while processing an mpc file. The
+ template file will have a mixture of plain text and the mpd
+ syntax described in the <a href=
+ "MakeProjectCreator.html#MPD%20Syntax" class="XRef">Template
+ Files</a> section. Here is our sample <em class=
+ "Code">fictional.mpd</em>.</li>
+
+ <li style="list-style: none">
+ <p class="Code">
+ //=======================================================================</p>
+
+ <p class="Code">// This project has been generated by MPC.</p>
+
+ <p class="Code">// CAUTION! Hand edit only if you know what you
+ are doing!</p>
+
+ <p class="Code">
+ //=======================================================================</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 1 - PROJECT OPTIONS</p>
+
+ <p class="Code">ctags:*</p>
+
+ <p class="Code">debugSwitches:-nw</p>
+
+ <p class="Code">//end-proj-opts</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 2 - MAKEFILE</p>
+
+ <p class="Code">Makefile.&lt;%project_name%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 3 - OPTIONS</p>
+
+ <p class="Code">//end-options</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 4 - TARGET FILE</p>
+
+ <p class="Code">&lt;%if(exename)%&gt;</p>
+
+ <p class="Code">&lt;%exename%&gt;</p>
+
+ <p class="Code">&lt;%else%&gt;</p>
+
+ <p class="Code">&lt;%if(sharedname)%&gt;</p>
+
+ <p class="Code">&lt;%sharedname%&gt;</p>
+
+ <p class="Code">&lt;%else%&gt;</p>
+
+ <p class="Code">&lt;%if(staticname)%&gt;</p>
+
+ <p class="Code">&lt;%staticname%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 5 - SOURCE FILES</p>
+
+ <p class="Code">&lt;%foreach(source_files)%&gt;</p>
+
+ <p class="Code">&lt;%source_file%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">//end-srcfiles</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p>
+
+ <p class="Code">&lt;%foreach(includes)%&gt;</p>
+
+ <p class="Code">&lt;%include%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">//end-include-dirs</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p>
+
+ <p class="Code">&lt;%foreach(libpaths)%&gt;</p>
+
+ <p class="Code">&lt;%libpath%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">//end-library-dirs</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 8 - DEFINITIONS</p>
+
+ <p class="Code">&lt;%foreach(macros defines)%&gt;</p>
+
+ <p class="Code">-D&lt;%macro%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%if(pch_header)%&gt;</p>
+
+ <p class="Code">&lt;%foreach(pch_defines)%&gt;</p>
+
+ <p class="Code">-D&lt;%pch_define%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">&lt;%endif%&gt;</p>
+
+ <p class="Code">//end-defs</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 9 - C FLAGS</p>
+
+ <p class="Code">&lt;%cflags("-g")%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 10 - LIBRARY FLAGS</p>
+
+ <p class="Code">&lt;%libflags%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 11 - SRC DIRECTORY</p>
+
+ <p class="Code">.</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 12 - OBJ DIRECTORY</p>
+
+ <p class="Code">&lt;%objdir(".")%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 13 - BIN DIRECTORY</p>
+
+ <p class="Code">
+ &lt;%if(install)%&gt;&lt;%install%&gt;&lt;%else%&gt;.&lt;%endif%&gt;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// User targets section. Following lines will
+ be</p>
+
+ <p class="Code">// inserted into Makefile right after the
+ generated cleanall target.</p>
+
+ <p class="Code">// The Project File editor does not edit these
+ lines - edit the .vpj</p>
+
+ <p class="Code">// directly. You should know what you are
+ doing.</p>
+
+ <p class="Code">// Section 14 - USER TARGETS</p>
+
+ <p class="Code">&lt;%marker(top)%&gt;</p>
+
+ <p class="Code">&lt;%marker(macros)%&gt;</p>
+
+ <p class="Code">&lt;%marker(local)%&gt;</p>
+
+ <p class="Code">&lt;%marker(bottom)%&gt;</p>
+
+ <p class="Code">//end-user-targets</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">// Section 15 - LIBRARY FILES</p>
+
+ <p class="Code">&lt;%foreach(libs lit_libs pure_libs)%&gt;</p>
+
+ <p class="Code">&lt;%lib%&gt;</p>
+
+ <p class="Code">&lt;%endfor%&gt;</p>
+
+ <p class="Code">//end-library-files</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">Note that output is generated differently
+ depending upon whether <em class="Code">&lt;%exename%&gt;</em>,
+ <em class="Code">&lt;%sharedname%&gt;</em> or <em class=
+ "Code">&lt;%staticname%&gt;</em> is defined due to the if
+ statements that were used with relation these variable names.
+ Also, certain portions of the project file are only generated if
+ particular variables are set.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Project Creator</h5>
+
+ <ul>
+ <li class="BodyNoLead">Next, you would write the <em class=
+ "Code">FictionalProjectCreator.pm</em>. It may be best to start
+ with a copy of the <em class="Code">MakeProjectCreator.pm</em>
+ and edit it. Change the package name to <em class=
+ "Code">FictionalProjectCreator</em> and have it inherit from
+ <em class="Code">MakeProjectBase</em> and <em class=
+ "Code">ProjectCreator</em>. Then, override the methods that are
+ needed for this particular type.</li>
+
+ <li style="list-style: none">
+ <p class="Code">package FictionalProjectCreator;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Description : A Fictional Project Creator</p>
+
+ <p class="Code"># Author : Chad Elliott</p>
+
+ <p class="Code"># Create Date : 10/01/2004</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Pragmas</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use strict;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use MakeProjectBase;</p>
+
+ <p class="Code">use ProjectCreator;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use vars qw(@ISA);</p>
+
+ <p class="Code">@ISA = qw(MakeProjectBase ProjectCreator);</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Subroutine Section</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub convert_slashes {</p>
+
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return 0;</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub project_file_extension {</p>
+
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return '.fic';</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub get_dll_exe_template_input_file {</p>
+
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return 'fictionalexe';</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub get_dll_template_input_file {</p>
+
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return 'fictionaldll';</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub get_template {</p>
+
+ <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return 'fictional';</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">1;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">In our example, we inherit from the
+ MakeProjectBase which provides some methods that are common to
+ all &ldquo;make&rdquo; based project creators.</li>
+
+ <li class="Body">We override the <em class=
+ "Code">convert_slashes</em> method to return 0. A zero return
+ value tells MPC not to convert slashes to back slashes
+ (converting slashes is useful for Windows related build
+ tools).</li>
+
+ <li class="Body">We then override the <em class=
+ "Code">project_file_extension</em> method to return the project
+ file extension which is used by a method defined in the
+ MakeProjectBase module.</li>
+
+ <li class="Body">Next, we override the <em class=
+ "Code">get_dll_exe_template_input_file</em> and <em class=
+ "Code">get_dll_template_input_file</em> methods. Those methods
+ return the specific template input file names for a dynamic
+ executable and dynamic library, respectively.</li>
+
+ <li class="Body">Lastly, we override the <em class=
+ "Code">get_template</em> method to return the template file name
+ for our new project type. In our case, the method returns
+ <em class="Code">fictional</em> which corresponds to the name of
+ the template file we created earlier.</li>
+
+ <li class="Body">There are many other methods that can be
+ overridden to change the way MPC generates output. For a complete
+ list, see the &ldquo;Virtual Methods To Be Overridden&rdquo;
+ section of the <em class="Code">Creator.pm</em> and <em class=
+ "Code">ProjectCreator.pm</em>.</li>
+ </ul>
+ </div>
+
+ <div>
+ <h5 class="Head4">Workspace Creator</h5>
+
+ <ul>
+ <li class="BodyNoLead">The last part that you would need to write
+ is the <em class="Code">FictionalWorkspaceCreator.pm</em>. This
+ module is usually more code-intensive than its Project Creator
+ counterpart.</li>
+
+ <li style="list-style: none">
+ <p class="Code">package FictionalWorkspaceCreator;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Description : A Fictional Workspace
+ Creator</p>
+
+ <p class="Code"># Author : Chad Elliott</p>
+
+ <p class="Code"># Create Date : 10/01/2004</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Pragmas</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use strict;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use FictionalProjectCreator;</p>
+
+ <p class="Code">use WorkspaceCreator;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">use vars qw(@ISA);</p>
+
+ <p class="Code">@ISA = qw(WorkspaceCreator);</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code"># Subroutine Section</p>
+
+ <p class="Code">#
+ ************************************************************</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub workspace_file_name {</p>
+
+ <p class="Code">&nbsp;&nbsp;my $self = shift;</p>
+
+ <p class="Code">&nbsp;&nbsp;return
+ $self-&gt;get_modified_workspace_name($self-&gt;get_workspace_name(),
+ '.fws');</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub pre_workspace {</p>
+
+ <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
+
+ <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;print $fh '&lt;?xml version="1.0"
+ encoding="UTF-8"?&gt;', $crlf,</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;!--
+ MPC Command --&gt;', $crlf,</p>
+
+ <p class="Code">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&lt;!--
+ $0 @ARGV --&gt;", $crlf;</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">sub write_comps {</p>
+
+ <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>
+
+ <p class="Code">&nbsp;&nbsp;my $projects =
+ $self-&gt;get_projects();</p>
+
+ <p class="Code">&nbsp;&nbsp;my @list =
+ $self-&gt;sort_dependencies($projects);</p>
+
+ <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;&nbsp;print $fh '&lt;projects&gt;',
+ $crlf;</p>
+
+ <p class="Code">&nbsp;&nbsp;foreach my $project (@list) {</p>
+
+ <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;print $fh " &lt;project
+ path=\"$project\"/&gt;$crlf";</p>
+
+ <p class="Code">&nbsp;&nbsp;}</p>
+
+ <p class="Code">&nbsp;&nbsp;print $fh
+ "&lt;/projects&gt;$crlf";</p>
+
+ <p class="Code">}</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">1;</p>
+
+ <p class="Code">&nbsp;</p>
+
+ <p class="Code">&nbsp;</p>
+ </li>
+
+ <li class="Body">The first method we override from
+ WorkspaceCreator.pm is the <em class=
+ "Code">workspace_file_name</em> method. It is used to determine
+ the output file for the generated workspace.</li>
+
+ <li class="Body">Second, we override the <em class=
+ "Code">pre_workspace</em> method, which we use to print out the
+ generic unchanging section of our generated workspace.</li>
+
+ <li class="Body">Lastly, we override the <em class=
+ "Code">write_comps</em> method. This method is where the bulk of
+ the work is done in our workspace creator. A workspace creator
+ has many sets of data available. A reference to the list of
+ project file names can be obtained through the <em class=
+ "Code">get_projects</em> method; project-specific information can
+ be obtained through the <em class="Code">get_project_info</em>
+ method which returns an array reference where each array element
+ is an array containing the project name, project dependencies and
+ a project guid (if applicable).</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+</body>
+</html>