---
name: "icmstart.rc"
section: "7"
platform: "linux"
package: "icmake"
version: "13.07.00-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/icmstart.rc"
---

# icmstart.rc(7)

The icmstart(1) resource file

## NAME

icmstart.rc - The [icmstart(1)](/icmstart/1.md) resource file

## DESCRIPTION

The **icmstart.rc** file specifies files to be installed by [**icmstart**(1)](/icmstart/1.md).

A default **icmstart.rc** is found in */etc/icmake/icmstart.rc*, but if  *$HOME/.icmake/icmstart.rc* exists then the latter file is used by [**icmstart**(1)](/icmstart/1.md). *$HOME/.icmake/icmstart.rc* in turn is overruled by specifying a *-c* option when invoking [**icmstart**(1)](/icmstart/1.md).

The default resource file contains the following specifications, preparing for the construction of a **C++** program using [**icmbuild**(1)](/icmbuild/1.md):

```
    CLASSES
    icmconf
    P  main.cc
    P  main.ih
    Pb usage.cc
    Pb version.cc
    P ? scanner
    P ? parser
```

The *icmstart.rc* file may contain:

- o

  empty lines, which are ignored;

- o

  lines beginning with a hash-character (*#*), also ignored;

- o

  an optional installation mode followed by a source-destination specification.

## INSTALLATION MODE

An installation mode consists of a combination of:

- o

  either a *P* (don’t install with *icmstart xxx library*) or an *L* (don’t install with *icmstart xxx program*);

-

  - o

  a *D*, indicating that the source must also be installed by default, i.e., if neither \`program’ or \`library’ was specified as second argument;

-

  - o

  a *b*, indicating that the file must *not* be installed if the *-b* (basic installation) option was specified when calling *icmstart*;

-

  - o

  Following the optional  *P, L, D,* or *b* character a space delimited optional *?* may be specified. If specified the installation of the file or directory must be confirmed by the user.

## SOURCE-DESTINATION SPECIFICATIONS

The following source-destination specifications can be used in an *icmstart.rc* file (using *skeletons* below to refer to *icmstart’s* skeleton files directory):

- o

  *source*\
   a file named *source* must exist in *skeletons*. It is installed in the destination directory *\`dest’* that’s specified when calling [**icmstart**(1)](/icmstart/1.md). Example:

  ```
      CLASSES
  ```

  *skeletons/CLASSES* is installed as *dest/CLASSES*;

-

  - o

  *pathspec*\
   if \`pathspec’ does not begin with a slash it must exist in *skeletons*.  It is installed as \`pathspec’ in the destination directory specified when calling [**icmstart**(1)](/icmstart/1.md). Example:

  ```
      dir/file
  ```

  *skeletons/file* is installed as *dest/dir/file*;

-

  - o

  */pathspec* or *~/pathspec*\
   the *~*-character is expanded to the user’s home directory. The pathspec’s final element is installed in the destination directory specified when calling [**icmstart**(1)](/icmstart/1.md). Example:

  ```
      ~/.icmake/file
  ```

  *$HOME/.icmake/file* is installed as *dest/file*

When the above source specifications are followed by a destination specification *destspec* (a file or non-absolute directory specification) then the source specification is installed as *dest/destspec* below the destination directory specified when calling [**icmstart**(1)](/icmstart/1.md). Examples:

```
    CLASSES CLASSES             # skeletons/CLASSES is installed as
                                #   dest/CLASSES
    dir/file dir/file           # skeletons/dir/file is installed as
                                #   dest/dir/file
    ~/.icmake/file .icmake/file # $HOME/.icmake/file is installed as
                                #   dest/.icmake/file
```

Icmstart converts destination specifications to absolute paths. If these absolute paths do not begin with *dest’s* absolute path then an error message is displayed and **icmstart** ends.

## FINE-TUNING ICMCONF

The default *icmconf* file contains *#defines* which are used when a project uses a parser (by default generated by [**bisonc++**(1)](/bisonc++/1.md)) and/or a scanner (by default generated by [**flexc++**(1)](/flexc++/1.md)). All those *#defines* are commented out in the default *icmconf* file. They are:

```
    #define PARSER_DIR          ""
    #define PARSGEN             "bisonc++"
    #define PARSFLAGS           "-V"
    #define PARSSPEC            "grammar"
    #define PARSFILES           ""
    #define PARSOUT             "parse.cc"
    #define SCANNER_DIR         ""
    #define SCANGEN             "flexc++"
    #define SCANFLAGS           ""
    #define SCANSPEC            "lexer"
    #define SCANFILES            ""
    #define SCANOUT             "lex.cc"
```

However, the *icmstart.rc* file can be modified so that these *#defines* are omitted from the project’s *icmconf* file unless a parser and/or scanner is actually used by the project. For this:

- o

  copy the files in */usr/share/icmake* to *~/.icmake*;

-

  - o

  if the program uses a parser then define the file *~/.icmake/parser/icmconf* containing

  ```
      #define PARSER_DIR          "parser"
      #define PARSGEN             "bisonc++"
      #define PARSFLAGS           "-V"
      #define PARSSPEC            "grammar"
      #define PARSFILES           ""
      #define PARSOUT             "parse.cc"
  ```

  (here \`*parser*’ is the name of the directory containing the parser’s implementation; optionally another directory name can be specified); \
   Remove the parser-defines from *~/.icmake/icmconf*;\
   In *~/.icmake/icmconf/icmstart.rc* replace the parser-directory specification, like

  ```
      ? parser    parser
  ```

  by

  ```
      ? ~/.icmake/parser    parser
  ```

-

  - o

  if the program uses a scanner then define the file *~/.icmake/scanner/icmconf* containing

  ```
      #define SCANNER_DIR         "scanner"
      #define SCANGEN             "flexc++"
      #define SCANFLAGS           ""
      #define SCANSPEC            "lexer"
      #define SCANFILES            ""
      #define SCANOUT             "lex.cc"
  ```

  (here \`*scanner*’ is the name of the directory containing the scanner’s implementation; optionally another directory name can be specified);n() Remove the scanner-defines from *~/.icmake/icmconf*;\
   In *~/.icmake/icmconf/icmstart.rc* replace the scanner-directory specification, like

  ```
      ? scanner    scanner
  ```

  by

  ```
      ? ~/.icmake/scanner    scanner
  ```

In general: *icmconf #defines* can be redefined by removing them from *~/.icmake/icmconf*, specifying their redefinitions in *icmconf* files in subdirectories of *~/.icmake/icmconf*.

## FILES

The mentioned paths are sugestive only and may be installation dependent:

- o

  **/usr/share/icmake/icmconf**: example of an **icmbuild** configuration file;

- o

  **/usr/share/icmake/CLASSES**: example of an **icmbuild** *CLASSES* file;

- o

  **/usr/share/icmake/icmstart.rc**: default skeleton resource file.

## SEE ALSO

[**bisonc++**(1)](/bisonc++/1.md), [**flexc++**(1)](/flexc++/1.md), [**icmake**(1)](/icmake/1.md), [**icmbuild**(1)](/icmbuild/1.md), [**icmconf**(7)](/icmconf/7.md), [**icmstart**(1)](/icmstart/1.md)

## BUGS

None reported

## COPYRIGHT

This is free software, distributed under the terms of the  GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
