diff options
Diffstat (limited to 'ACE/MPC/docs/html/MakeProjectCreator.html')
-rw-r--r-- | ACE/MPC/docs/html/MakeProjectCreator.html | 7148 |
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"> </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"> </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"> </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’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 “install” file after processing each + project. These “install” 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 “make” 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"> </p> + + <p class="Code">mwc.pl -relative + PROJ_TOP=/usr/projects/top</p> + + <p class="Code"> </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"> </p> + + <p class="Code">project {</p> + + <p class="Code"> includes += $(PROJ_TOP)</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + </li> + + <li class="Body">The generated project file would contain text + similar to:</li> + + <li style="list-style: none"> + <p class="Code"> </p> + + <p class="Code">CPPFLAGS += -I..</p> + + <p class="Code"> </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"> </p> + + <p class="Code">mpc.pl -type vc71 -ti lib:vc7dsplib -ti + dll:vc7dspdll</p> + + <p class="Code"> </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"> </p> + + <p class="Code">mwc.pl -value_project + includes+=/include/path</p> + + <p class="Code"> </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"> </p> + + <p class="Code">mwc.pl -type vc71 -value_template + configurations=Release</p> + + <p class="Code"> </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"><%</em> and + <em class="Code">%></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"> </p> + + <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p> + + <p class="Code"> </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"><language>:<func name>[, + <language>:<func name>]*</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 “projects” 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 + “workspaces,” 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"> </p> + + <p class="Code">workspace(optional name): + optional_base_workspace {</p> + + <p class="Code"> file.mpc</p> + + <p class="Code"> directory</p> + + <p class="Code"> other.mwc</p> + + <p class="Code"> </p> + + <p class="Code"> exclude(vc6, vc7, vc71, vc8, vc9, + vc10, nmake) {</p> + + <p class="Code"> this_directory</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">workspace {</p> + + <p class="Code"> ...</p> + + <p class="Code"> static {</p> + + <p class="Code"> cmdline += -static</p> + + <p class="Code"> directory/foo.mpc</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> exclude(gnuace, make) {</p> + + <p class="Code"> some.mpc</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> // Associate the name "other" with + dir3</p> + + <p class="Code"> associate(other) {</p> + + <p class="Code"> dir3</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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 “projects” and each project + can inherit from base projects.</li> + + <li style="list-style: none"> + <p class="Code"> </p> + + <p class="Code">project(optional name): base_project, + another_base_project {</p> + + <p class="Code"> exename = client</p> + + <p class="Code"> includes += directory_name + other_directory</p> + + <p class="Code"> libpaths += /usr/X11R6/lib</p> + + <p class="Code"> </p> + + <p class="Code"> Header_Files {</p> + + <p class="Code"> file1.h</p> + + <p class="Code"> file2.h</p> + + <p class="Code"> fileN.h</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> Source_Files {</p> + + <p class="Code"> file1.cpp</p> + + <p class="Code"> file2.cpp</p> + + <p class="Code"> fileN.cpp</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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’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"><% %></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"><% %></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"><% + %></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 “project” 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"> </p> + + <p class="Code">Source_Files {</p> + + <p class="Code"> file1.cpp</p> + + <p class="Code"> file2.cpp</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">Source_Files(MACRO_NAME) {</p> + + <p class="Code"> BlockA {</p> + + <p class="Code"> file1.cpp</p> + + <p class="Code"> file2.cpp</p> + + <p class="Code"> }</p> + + <p class="Code"> BlockB {</p> + + <p class="Code"> file3.cpp</p> + + <p class="Code"> file4.cpp</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">verbatim(<project type>, + <location>) {</p> + + <p class="Code"> ...</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + </li> + + <li class="Body">When MPC is generating a project of type + <em class="Code"><project type></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"><location></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"> </p> + + <p class="Code">verbatim(gnuace, bottom) {</p> + + <p class="Code"> 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"> </p> + + <p class="Code">expand(VAR_NAME) {</p> + + <p class="Code"> $ENV_VAR</p> + + <p class="Code"> 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"> </p> + + <p class="Code">specific(prop:windows) {</p> + + <p class="Code"> lit_libs += qt-mt230nc</p> + + <p class="Code">} else {</p> + + <p class="Code"> lit_libs += qt-mt</p> + + <p class="Code">}</p> + + <p class="Code"> </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 ’!’) + 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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body">Yes</p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body">Yes</p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body"> </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"> </p> + + <p class="Code">conditional(<project type|property> [, + <project type|property> ...]) {</p> + + <p class="Code"> source1.cpp</p> + + <p class="Code"> ...</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code">conditional(<project type|property> [, + <project type|property> ...]) {</p> + + <p class="Code"> source1.cpp</p> + + <p class="Code"> ...</p> + + <p class="Code">} else {</p> + + <p class="Code"> source2.cpp</p> + + <p class="Code"> ...</p> + + <p class="Code">}</p> + + <p class="Code"> </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 ’!’) 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"> </p> + + <p class="Code">project {</p> + + <p class="Code"> Define_Custom(MOC) {</p> + + <p class="Code"> automatic = 0</p> + + <p class="Code"> command = + $(QTDIR)/bin/moc</p> + + <p class="Code"> output_option = + -o</p> + + <p class="Code"> inputext = .h</p> + + <p class="Code"> pre_extension = + _moc</p> + + <p class="Code"> source_outputext = + .cpp</p> + + <p class="Code"> keyword mocflags = + commandflags</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> // Custom Component</p> + + <p class="Code"> MOC_Files {</p> + + <p class="Code"> QtReactor.h</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> Source_Files {</p> + + <p class="Code"> QtReactor_moc.cpp</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + </li> + + <li class="Body">The above example defines a custom file type, + “<em class="Code">MOC</em> ”, 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 + <name></em></p> + </td> + + <td rowspan="1" colspan="1"> + <p class="Tbl-Body">This is a special assignment that + allows the user to map <name> 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 + “automatic” 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">>></em> construct.</li> + + <li class="Body">Below is an example that demonstrates the use + of <em class="Code">>></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"> </p> + + <p class="Code">project {</p> + + <p class="Code"> Define_Custom(Quogen) {</p> + + <p class="Code"> automatic = 0</p> + + <p class="Code"> command = perl quogen.pl</p> + + <p class="Code"> commandflags = --debuglevel=1 + --language=c++ \</p> + + <p class="Code"> + --kernel_language=c++</p> + + <p class="Code"> inputext = .prp</p> + + <p class="Code"> keyword quogenflags = + commandflags</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> Quogen_Files {</p> + + <p class="Code"> foo.prp >> + hello.h hello.cpp</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> Source_Files {</p> + + <p class="Code"> hello.cpp</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + </li> + + <li class="Body">You can use the <em class="Code"><<</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"><<</em> foo.in as shown below.</li> + + <li style="list-style: none"> + <p class="Code"> </p> + + <p class="Code">Quogen_Files {</p> + + <p class="Code"> foo.prp >> hello.h + hello.cpp << foo.in</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">project {</p> + + <p class="Code"> Define_Custom(TEST) {</p> + + <p class="Code"> optional(keyword) + {</p> + + <p class="Code"> + flag_keyword(option) += + value [, value]</p> + + <p class="Code"> }</p> + + <p class="Code"> }</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"> </p> + + <p class="Code">Define_Custom(IDL) {</p> + + <p class="Code"> ...</p> + + <p class="Code"> inputext = .idl</p> + + <p class="Code"> source_pre_extension = C, S</p> + + <p class="Code"> header_pre_extension = C, S</p> + + <p class="Code"> inline_pre_extension = C, S</p> + + <p class="Code"> source_outputext = .cpp, .cxx, + .cc, .C</p> + + <p class="Code"> header_outputext = .h, .hpp, + .hxx, .hh</p> + + <p class="Code"> inline_outputext = .inl, .i</p> + + <p class="Code"> keyword idlflags = + commandflags</p> + + <p class="Code"> </p> + + <p class="Code"> optional(source_pre_extension) + {</p> + + <p class="Code"> commandflags(-GA) += + A</p> + + <p class="Code"> }</p> + + <p class="Code"> optional(template_outputext) + {</p> + + <p class="Code"> commandflags(!-Sc) += + S_T.cpp, S_T.cxx, S_T.cc, S_T.C</p> + + <p class="Code"> }</p> + + <p class="Code"> optional(header_pre_extension) + {</p> + + <p class="Code"> commandflags(!-Sc) += + S_T</p> + + <p class="Code"> }</p> + + <p class="Code"> optional(inline_pre_extension) + {</p> + + <p class="Code"> commandflags(!-Sc) += + S_T</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">MOC_Files {</p> + + <p class="Code"> commandflags += -nw</p> + + <p class="Code"> gendir = moc_generated</p> + + <p class="Code"> QtReactor.h</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code">Source_Files {</p> + + <p class="Code"> + moc_generated/QtReactor_moc.cpp</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">project: taoidldefaults {</p> + + <p class="Code"> specific(!automake) {</p> + + <p class="Code"> tao_idlflags += -Sc + -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> // This allows "make idl_stubs" + to work</p> + + <p class="Code"> verbatim(gnuace, macros) {</p> + + <p class="Code"> IDL_CLIENT_HDR_EXT + ?= .h</p> + + <p class="Code"> IDL_CLIENT_INL_EXT + ?= .i</p> + + <p class="Code"> IDL_CLIENT_SRC_EXT + ?= .cpp</p> + + <p class="Code"> IDL_SERVER_HDR_EXT + ?= _s.h</p> + + <p class="Code"> IDL_SERVER_INL_EXT + ?= _s.i</p> + + <p class="Code"> IDL_SERVER_SRC_EXT + ?= _s.cpp</p> + + <p class="Code"> }</p> + + <p class="Code"> </p> + + <p class="Code"> Modify_Custom(IDL) {</p> + + <p class="Code"> + source_pre_extension = , _s</p> + + <p class="Code"> + header_pre_extension = , _s</p> + + <p class="Code"> + inline_pre_extension = , _s</p> + + <p class="Code"> inline_outputext + = .i</p> + + <p class="Code"> }</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"><%</em> and <em class= + "Code">%></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"><%input%></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"><%input_basename%></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"><%input_dirname%></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"><%input_noext%></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"><%input_ext%></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"><%output%></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"><%output_basename%></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"><%output_dirname%></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"><%output_noext%></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"><%output_ext%></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"><%documentation_file%></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"><%header_file%></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"><%inline_file%></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"><%resource_file%></em> (<em class= + "TableCode"><%resx_file%></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"><%source_file%></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"><%template_file%></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"><%documentation_file_noext%></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"><%header_file_noext%></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"><%inline_file_noext%></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"><%resource_file_noext%></em> + (<em class="TableCode"><%resx_file_noext%></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"><%source_file_noext%></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"><%template_file_noext%></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"><%input_ext%></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"><%output_ext%></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"> </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"><%and%></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"><%cat%></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"><%cmdsep%></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"><%cat%></em> and <em class= + "Code"><%mv%></em> commands would be run. + <em class="Code"><%cat%> <%source_file%> + <%gt%> foo <%cmdsep%> <%mv%> foo + other_dir</em></p> + </td> + </tr> + + <tr> + <td rowspan="1" colspan="1"> + <p class="TblCode"><em class= + "TableCode"><%cmp%></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"><%cp%></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"><%crlf%></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"><%equote%></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"><%gendir%></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"><%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%></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"><%mkdir%></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"><%mv%></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"><%nul%></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"><%or%></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"><%os%></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"><%prj_type%></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"><%quote%></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"><%rm%></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"><%rmdir%></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"><%slash%></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"><%temporary%></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"><%bat%></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"><%cmd%></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"><%exe%></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"> </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"> </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 ’!’ 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"> </p> + + <p class="Code">// ziparchive.mpb</p> + + <p class="Code">feature(ziparchive) {</p> + + <p class="Code"> includes += $(ZIPARCHIVEROOT)</p> + + <p class="Code"> libpaths += + $(ZIPARCHIVEROOT)/lib</p> + + <p class="Code"> libs += + ziparch</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">project: taoserver {</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </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"> </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"> </p> + + <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent, + minimum_corba {</p> + + <p class="Code"> sharedname = TAO_RTEC_Perf</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"> dllflags += + TAO_RTEC_PERF_BUILD_DLL</p> + + <p class="Code"> </p> + + <p class="Code"> Template_Files {</p> + + <p class="Code"> Auto_Disconnect.cpp</p> + + <p class="Code"> Auto_Functor.cpp</p> + + <p class="Code"> + Low_Priority_Setup.cpp</p> + + <p class="Code"> RIR_Narrow.cpp</p> + + <p class="Code"> Servant_var.cpp</p> + + <p class="Code"> Shutdown.cpp</p> + + <p class="Code"> Task_Activator.cpp</p> + + <p class="Code"> }</p> + + <p class="Code">}</p> + + <p class="Code"> </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"> </p> + + <p class="Code">project(RTEC_Perf): strategies, rtcorbaevent, + minimum_corba {</p> + + <p class="Code"> </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"> </p> + + <p class="Code">sharedname = TAO_RTEC_Perf</p> + + <p class="Code"> </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"> </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"> </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"> </p> + + <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p> + + <p class="Code"> </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"> </p> + + <p class="Code">Template_Files {</p> + + <p class="Code"> Auto_Disconnect.cpp</p> + + <p class="Code"> Auto_Functor.cpp</p> + + <p class="Code"> Low_Priority_Setup.cpp</p> + + <p class="Code"> RIR_Narrow.cpp</p> + + <p class="Code"> Servant_var.cpp</p> + + <p class="Code"> Shutdown.cpp</p> + + <p class="Code"> Task_Activator.cpp</p> + + <p class="Code">}</p> + + <p class="Code"> </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’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"><% %></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"><% %></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"> </p> + + <p class="Code"><%if(exename)%>BIN = + <%exename%><%else%>LIB = + <%sharedname%><%endif%></p> + + <p class="Code"> </p> + </li> + + <li class="Body">is equivalent to:</li> + + <li style="list-style: none"> + <p class="Code"> </p> + + <p class="Code"><%if(exename)%></p> + + <p class="Code">BIN = <%exename%></p> + + <p class="Code"><%else%></p> + + <p class="Code">LIB = <%sharedname%></p> + + <p class="Code"><%endif%></p> + + <p class="Code"> </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"> </p> + + <p class="Code">FILES=<%foreach(fvar, idl_files source_files + header_files)%> <%fvar%><%endfor%></p> + + <p class="Code"> </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 ’<em class="Code">s</em> ’ removed.</li> + + <li style="list-style: none"> + <p class="Code"> </p> + + <p class="Code">FILES=<%foreach(idl_files source_files + header_files)%> <%idl_file%><%endfor%></p> + + <p class="Code"> </p> + </li> + + <li class="Body">Note that the <em class= + "Code"><%idl_file%></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 ’<em class= + "Code">s</em> ’, 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"> </p> + + <p class="Code"><%foreach(filelist)%> + <%filelist%><%endfor%></p> + + <p class="Code"> </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"><%marker(local)%></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"><%temporary%></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"> </p> + + <p class="Code">document_template.pl v1.3</p> + + <p class="Code">Usage: document_template.pl <template> + [<html output> [language]]</p> + + <p class="Code"> </p> + + <p class="Code">html output - This defaults to the name of the + template file with the .mpd</p> + + <p class="Code"> + extension replaced with + .html.</p> + + <p class="Code">language - This defaults to + the language for which the template is designed.</p> + + <p class="Code"> + It can be any of the valid + language settings for MPC:</p> + + <p class="Code"> + 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">-></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->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->input_file->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"> </p> + + <p class="Code"><%if(custom_types)%></p> + + <p class="Code"><%foreach(custom_types)%></p> + + <p class="Code"> + <%foreach(custom_type->input_files)%></p> + + <p class="Code"> + <%foreach(custom_type->input_file->output_files)%></p> + + <p class="Code"> + <%custom_type->input_file->output_file%>: + <%custom_type->input_file%></p> + + <p class="Code"> + <%custom_type->command%> + <%custom_type->commandflags%> $@</p> + + <p class="Code"> </p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endif%></p> + + <p class="Code"> </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"> </p> + + <p class="Code"><%if(grouped_source_files)%></p> + + <p class="Code"><%comment(Get back each set of grouped + files)%></p> + + <p class="Code"><%foreach(grouped_source_files)%></p> + + <p class="Code"><%comment(This will provide the name of + the group)%></p> + + <p class="Code"><%grouped_source_file%> = \</p> + + <p class="Code"><%comment(Get all the source files in a + single group)%></p> + + <p class="Code"> + <%foreach(grouped_source_file->files)%></p> + + <p class="Code"> + <%grouped_source_file->file)%><%fornotlast(" + \\")%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"> </p> + + <p class="Code">ifndef + <%grouped_source_files->component_name%></p> + + <p class="Code"> + <%grouped_source_files->component_name%> = \</p> + + <p class="Code"><%foreach(grouped_source_files)%></p> + + <p class="Code"> + <%grouped_source_file%><%fornotlast(" + \\")%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code">endif</p> + + <p class="Code"><%endif%></p> + + <p class="Code"> </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"> </p> + + <p class="Code">variable_name = value1 "value 2"</p> + + <p class="Code">variable_name += another_value</p> + + <p class="Code"> </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"> </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"> </p> + + <p class="Code">Release {</p> + + <p class="Code"> compile_flags = /W3 /GX /O2 /MD + /GR</p> + + <p class="Code"> defines = NDEBUG</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code">Debug {</p> + + <p class="Code"> compile_flags = /W3 /Gm /GX /Zi /Od + /MDd /GR /Gy</p> + + <p class="Code"> defines = _DEBUG</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code">conditional_include "vcfullmacros"</p> + + <p class="Code"> </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"> </p> + + <p class="Code"><%foreach(configurations)%></p> + + <p class="Code">Name = <%configuration%></p> + + <p class="Code"><%compile_flags%><%foreach(defines + common_defines)%> /D <%define%>=1<%endfor%></p> + + <p class="Code"> </p> + + <p class="Code"><%endfor%></p> + + <p class="Code"> </p> + </li> + + <li class="Body">The following output is generated from the above + example:</li> + + <li style="list-style: none"> + <p class="Code"> </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"> </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"> </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"> </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"> </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"> </p> + + <p class="Code">// Section 2 - MAKEFILE</p> + + <p class="Code">Makefile.<%project_name%></p> + + <p class="Code"> </p> + + <p class="Code">// Section 3 - OPTIONS</p> + + <p class="Code">//end-options</p> + + <p class="Code"> </p> + + <p class="Code">// Section 4 - TARGET FILE</p> + + <p class="Code"><%if(exename)%></p> + + <p class="Code"><%exename%></p> + + <p class="Code"><%else%></p> + + <p class="Code"><%if(sharedname)%></p> + + <p class="Code"><%sharedname%></p> + + <p class="Code"><%else%></p> + + <p class="Code"><%if(staticname)%></p> + + <p class="Code"><%staticname%></p> + + <p class="Code"><%endif%></p> + + <p class="Code"><%endif%></p> + + <p class="Code"><%endif%></p> + + <p class="Code"> </p> + + <p class="Code">// Section 5 - SOURCE FILES</p> + + <p class="Code"><%foreach(source_files)%></p> + + <p class="Code"><%source_file%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code">//end-srcfiles</p> + + <p class="Code"> </p> + + <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p> + + <p class="Code"><%foreach(includes)%></p> + + <p class="Code"><%include%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code">//end-include-dirs</p> + + <p class="Code"> </p> + + <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p> + + <p class="Code"><%foreach(libpaths)%></p> + + <p class="Code"><%libpath%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code">//end-library-dirs</p> + + <p class="Code"> </p> + + <p class="Code">// Section 8 - DEFINITIONS</p> + + <p class="Code"><%foreach(macros defines)%></p> + + <p class="Code">-D<%macro%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%if(pch_header)%></p> + + <p class="Code"><%foreach(pch_defines)%></p> + + <p class="Code">-D<%pch_define%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code"><%endif%></p> + + <p class="Code">//end-defs</p> + + <p class="Code"> </p> + + <p class="Code">// Section 9 - C FLAGS</p> + + <p class="Code"><%cflags("-g")%></p> + + <p class="Code"> </p> + + <p class="Code">// Section 10 - LIBRARY FLAGS</p> + + <p class="Code"><%libflags%></p> + + <p class="Code"> </p> + + <p class="Code">// Section 11 - SRC DIRECTORY</p> + + <p class="Code">.</p> + + <p class="Code"> </p> + + <p class="Code">// Section 12 - OBJ DIRECTORY</p> + + <p class="Code"><%objdir(".")%></p> + + <p class="Code"> </p> + + <p class="Code">// Section 13 - BIN DIRECTORY</p> + + <p class="Code"> + <%if(install)%><%install%><%else%>.<%endif%></p> + + <p class="Code"> </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"><%marker(top)%></p> + + <p class="Code"><%marker(macros)%></p> + + <p class="Code"><%marker(local)%></p> + + <p class="Code"><%marker(bottom)%></p> + + <p class="Code">//end-user-targets</p> + + <p class="Code"> </p> + + <p class="Code">// Section 15 - LIBRARY FILES</p> + + <p class="Code"><%foreach(libs lit_libs pure_libs)%></p> + + <p class="Code"><%lib%></p> + + <p class="Code"><%endfor%></p> + + <p class="Code">//end-library-files</p> + + <p class="Code"> </p> + </li> + + <li class="Body">Note that output is generated differently + depending upon whether <em class="Code"><%exename%></em>, + <em class="Code"><%sharedname%></em> or <em class= + "Code"><%staticname%></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"> </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"> </p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"># Pragmas</p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"> </p> + + <p class="Code">use strict;</p> + + <p class="Code"> </p> + + <p class="Code">use MakeProjectBase;</p> + + <p class="Code">use ProjectCreator;</p> + + <p class="Code"> </p> + + <p class="Code">use vars qw(@ISA);</p> + + <p class="Code">@ISA = qw(MakeProjectBase ProjectCreator);</p> + + <p class="Code"> </p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"># Subroutine Section</p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"> </p> + + <p class="Code">sub convert_slashes {</p> + + <p class="Code"> #my $self = shift;</p> + + <p class="Code"> return 0;</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub project_file_extension {</p> + + <p class="Code"> #my $self = shift;</p> + + <p class="Code"> return '.fic';</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub get_dll_exe_template_input_file {</p> + + <p class="Code"> #my $self = shift;</p> + + <p class="Code"> return 'fictionalexe';</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub get_dll_template_input_file {</p> + + <p class="Code"> #my $self = shift;</p> + + <p class="Code"> return 'fictionaldll';</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub get_template {</p> + + <p class="Code"> #my $self = shift;</p> + + <p class="Code"> return 'fictional';</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code">1;</p> + + <p class="Code"> </p> + </li> + + <li class="Body">In our example, we inherit from the + MakeProjectBase which provides some methods that are common to + all “make” 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 “Virtual Methods To Be Overridden” + 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"> </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"> </p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"># Pragmas</p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"> </p> + + <p class="Code">use strict;</p> + + <p class="Code"> </p> + + <p class="Code">use FictionalProjectCreator;</p> + + <p class="Code">use WorkspaceCreator;</p> + + <p class="Code"> </p> + + <p class="Code">use vars qw(@ISA);</p> + + <p class="Code">@ISA = qw(WorkspaceCreator);</p> + + <p class="Code"> </p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"># Subroutine Section</p> + + <p class="Code"># + ************************************************************</p> + + <p class="Code"> </p> + + <p class="Code">sub workspace_file_name {</p> + + <p class="Code"> my $self = shift;</p> + + <p class="Code"> return + $self->get_modified_workspace_name($self->get_workspace_name(), + '.fws');</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub pre_workspace {</p> + + <p class="Code"> my($self, $fh) = @_;</p> + + <p class="Code"> my $crlf = $self->crlf();</p> + + <p class="Code"> </p> + + <p class="Code"> print $fh '<?xml version="1.0" + encoding="UTF-8"?>', $crlf,</p> + + <p class="Code"> + '<!-- + MPC Command -->', $crlf,</p> + + <p class="Code"> + "<!-- + $0 @ARGV -->", $crlf;</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">sub write_comps {</p> + + <p class="Code"> my($self, $fh) = @_;</p> + + <p class="Code"> my $projects = + $self->get_projects();</p> + + <p class="Code"> my @list = + $self->sort_dependencies($projects);</p> + + <p class="Code"> my $crlf = $self->crlf();</p> + + <p class="Code"> </p> + + <p class="Code"> print $fh '<projects>', + $crlf;</p> + + <p class="Code"> foreach my $project (@list) {</p> + + <p class="Code"> print $fh " <project + path=\"$project\"/>$crlf";</p> + + <p class="Code"> }</p> + + <p class="Code"> print $fh + "</projects>$crlf";</p> + + <p class="Code">}</p> + + <p class="Code"> </p> + + <p class="Code"> </p> + + <p class="Code">1;</p> + + <p class="Code"> </p> + + <p class="Code"> </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> |