VMS Help
CXX, Qualifiers, /INCLUDE_DIRECTORY

 *Conan The Librarian

       /INCLUDE_DIRECTORY
       /INCLUDE_DIRECTORY=(place[,...])
       /NOINCLUDE_DIRECTORY (D)

    Provides an additional level of search for user-defined include
    files. Each pathname argument can be either a logical name or
    a legal UNIX style directory in a quoted string. The default is
    /NOINCLUDE_DIRECTORY.

    The /INCLUDE_DIRECTORY qualifier provides functionality similar
    to the -I option of the cxx command on Tru64 UNIX systems.
    This qualifier allows you to specify additional locations to
    search for files to include. Putting an empty string in the
    specification prevents the compiler from searching any of the
    locations it normally searches but directs it to search only
    in locations you identify explicitly on the command line with
    the /INCLUDE_DIRECTORY And /LIBRARY qualifiers (or by way of
    the specification of the primary source file, depending on the
    /NESTED_INCLUDE_DIRECTORY qualifier).

    The basic order for searching depends on the form of the header
    name (after macro expansion), with additional aspects controlled
    by other command line qualifiers as well as the presence or
    absence of logical name definitions. The valid possibilities
    for names are as follows:

    o  Enclosed in quotes. For example: "stdio.h"

    o  Enclosed in angle brackets. For example: <stdio.h>

    Unless otherwise defined, searching a location means that the
    compiler uses the string specifying the location as the default
    file specification in a call to an RMS system service (that is,
    a $SEARCH/$PARSE) with a primary file specification consisting
    of the name in the #include (without enclosing delimiters). The
    search terminates successfully as soon as a file can be opened
    for reading.

    Specifying a null string in the /INCLUDE qualifier causes the
    compiler to do a non-standard search. This search path is as
    follows:

    1. The current directory (quoted form only)

    2. Any directories specified in the /INCLUDE qualifier

    3. The directory of the primary input file

    4. Text libraries specified on the command line using /LIBRARY

    For standard searches, the search order is as follows:

    1. Search the current directory (directory of the source
       being processed). If angle-bracket form, search only if no
       directories are specified with /INCLUDE_DIRECTORY.

    2. Search the locations specified in the /INCLUDE_DIRECTORY
       qualifier (if any).

    3. If CXX$SYSTEM_INCLUDE is defined as a logical name, search
       CXX$SYSTEM_INCLUDE:.HXX or just CXX$SYSTEM_INCLUDE:.,
       depending on the qualifier /ASSUME=NOHEADER_TYPE_DEFAULT.
       If nothing is found, go to step 6.

    4. If CXX$LIBRARY_INCLUDE is defined as a logical name,
       CXX$LIBRARY_INCLUDE:.HXX or CXX$LIBRARY_INCLUDE:., depending
       on the qualifier /ASSUME=NOHEADER_TYPE_DEFAULT. If nothing is
       found, go to step 6.

    5. If /ASSUME=HEADER_TYPE_DEFAULT is not specified, search the
       default list of locations for plain-text copies of compiler
       header files as follows:

          SYS$COMMON:[CXX$LIB.INCLUDE.CXXL$ANSI_DEF]
          SYS$COMMON:[CXX$LIB.INCLUDE.DECC$RTLDEF_HXX].HXX
          SYS$COMMON:[DECC$LIB.INCLUDE.DECC$RTLDEF].H
          SYS$COMMON:[DECC$LIB.INCLUDE.SYS$STARLET_C].H

       If /ASSUME=HEADER_TYPE_DEFAULT is specified, search the
       default list of locations for plain-text copies of compiler
       header files as follows:

          SYS$COMMON:[CXX$LIB.INCLUDE.DECC$RTLDEF_HXX].HXX
          SYS$COMMON:[DECC$LIB.INCLUDE.DECC$RTLDEF].H
          SYS$COMMON:[DECC$LIB.INCLUDE.SYS$STARLET_C].H
          SYS$COMMON:[CXX$LIB.INCLUDE.CXXL$ANSI_DEF]

    6. Search the directory of the primary input file.

    7. If quoted form, and CXX$USER_INCLUDE is defined as a logical
       name, search CXX$USER_INCLUDE:.HXX or CXX$USER_INCLUDE:.,
       depending on the /ASSUME=NOHEADER_TYPE_DEFAULT qualifier.

    8. Search the text libraries. Extract the simple file name and
       file type from the #include specification, and use them to
       determine a module name for each text library. There are three
       forms of module names used by the compiler:

       1. type stripped:

          The file type will be removed from the include file
          specification to form a library module name. Examples:

          #include        Module name "FOO"
          "foo.h"
          #include        Module name "FOO"
          "foo"
          #include        Module name "FOO"
          "foo"

       2. type required:

          The file type must be a part of the file name. Examples:

          #include        Module name "FOO.H"
          "foo.h"
          #include        Module name "FOO."
          "foo"
          #include        Module name "FOO."
          "foo"

       3. type optional:

          First an attempt is made to find a module with the type
          included in the module name. If this is unsuccessful, an
          attempt is made with the type stripped from the module
          name. If this is unsuccessful, the search moves on to the
          next library.

       If /ASSUME=HEADER_TYPE_DEFAULT is specified, the following
       text libraries are searched in this order:

          Libraries specified on the command line with the /LIBRARY
          qualifier (all files, type stripped)
          CXX$TEXT_LIBRARY (all files, type stripped)
          DECC$RTLDEF (H files and unspecified files, type stripped)
          SYS$STARLET_C (all files, type stripped)
          CXXL$ANSI_DEF (unspecified files, type stripped)

       Otherwise, these text libraries are searched in this order:

          Libraries specified on the command line with the /LIBRARY
          qualifier (all files, type optional)
          CXX$TEXT_LIBRARY (all files, type optional)
          CXXL$ANSI_DEF (all files, type required)
          DECC$RTLDEF (H files and unspecified files, type stripped)
          SYS$STARLET_C (all files, type stripped)

       Two text library search examples (stop when something is
       found):

       Example 1

       #include "foo"

       1. For each library specified via the /LIBRARY qualifier:

             - Look for "FOO."
             - Look for "FOO"

       2. Look for "FOO." in CXX$TEXT_LIBRARY

       3. Look for "FOO" in CXX$TEXT_LIBRARY

       4. Look for "FOO." in CXXL$ANSI_DEF (Do not look for "FOO"
          because the type is required as part of the module name)

       5. Look for "FOO" in DECC$RTLDEF (not "FOO." because the type
          must not be part of the module name)

       6. Look for "FOO" in SYS$STARLET_C (not "FOO." because the
          type must not be part of the module name)

       Example 2

       #include "foo.h"

       1. For each library specified via the /LIBRARY qualifier:

             - Look for "FOO.H"
             - Look for "FOO"

       2. Look for "FOO.H" in CXX$TEXT_LIBRARY

       3. Look for "FOO" in CXX$TEXT_LIBRARY

       4. Look for "FOO.H" in CXXL$ANSI_DEF (Do not look for "FOO"
          because the type is required as part of the module name)

       5. Look for "FOO" in DECC$RTLDEF (not "FOO.H" because the type
          must not be part of the module name)

       6. Look for "FOO" in SYS$STARLET_C (not "FOO.H" because the
          type must not be part of the module name)

       7. If neither CXX$LIBRARY_INCLUDE nor CXX$SYSTEM_INCLUDE is
          defined as a logical name, then search SYS$LIBRARY:.HXX.
  Close     Help