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

# icmstart(1)

A startup script for icmbuild program maintenance

## NAME

icmstart - A startup script for icmbuild program maintenance

## SYNOPSIS

**icmstart** *\[Options\]* top-dir \[program\|library\]

## DESCRIPTION

Although *icmake*-scripts can be written from scratch to handle program maintenance, often the required actions are very comparable. This observation resulted in the construction of two *icmake*-tools: [**icmstart**(1)](/icmstart/1.md), initializing a directory for program development and [**icmbuild**(1)](/icmbuild/1.md), handling the actual program maintenance. Both come predefined with *icmake’s* distribution, to initialize and maintain **C++** programs (or, after minimal adaptation, **C** programs). They can also easily be tailored to other programming languages. The *icmstart* script and *icmbuild* program can directly be called: *icmstart* is an *icmake* script, for which the command-shell calls *icmake*; *icmbuild* is a small **C++** program calling *icmake* to process the *icmbuild* script in (commonly) */usr/libexec/icmake*.

This man-page covers **icmstart**; refer to the [**icmbuild**(1)](/icmbuild/1.md) man-page for information about how *icmbuild* is used.

The **icmstart** script is a generic script which is used to initialize a directory with a basic set of files which are commonly used when developing a **C++** or **C** program.

**Icmstart** creates an initial directory (here named \`*top-dir*’) installing the files *CLASSES, VERSION* and *icmconf* below *top-dir*. A second argument \`*program*’ or \`*library*’ may be specified as the default mode of operation of the [**icmbuild**(1)](/icmbuild/1.md) script, usually resulting in adding additional skeleton source files. If the predefined set of files doesn’t fit your needs, then the default set can easily be modified. The default set of skeleton files is listed in the file */etc/icmake/icmstart.rc*. Refer to the [**icmstart.rc**(7)](/icmstart.rc/7.md) man-page for information about how this file is structured and how it can be adapted.

After switching to the directory created by **icmstart** [**icmbuild**(1)](/icmbuild/1.md) can be used for program maintenance.

## OPTIONS

*Icmstart* supports the following options, which (when specified) must be *icmstart’s* first arguments:

- o

  *-b*\
   basic installation: the files *VERSION, usage.cc* and *version.cc* are not installed, and the *#define USE\_VERSION* entry in icmconf is commented out;

-

  - o

  *-c confpath*\
   use the configuration files (*icmstart.rc, AUTHOR, YEARS* and *VERSION*) if found in \`confpath’ rather than using the files found in *~/.icmake* and/or */etc/icmake/*. Once a file is found it is used, allowing partial overrides of the default files provided by [**icmake**(1)](/icmake/1.md);

-

  - o

  *-d*\
   do not execute any commands, but show the commands that would have been executed on the standard output;

-

  - o

  *-I*\
   do not install files;

-

  - o

  *-r*\
   unconditionally replace existing files. If *-r* is not provided **icmstart** asks the user to confirm that an existing file must be overwritten. If a skeleton specification refers to a directory, the full directory and its subdirectories are replaced;

-

  - o

  *-s skeleton-path* \
   by default skeleton files are listed in the skeleton resource file */usr/share/icmake/icmstart.rc*. Alternatively, the skeleton resource file may be specified by the *ICM* environment variable, which -in turn- may be overruled by the path specified with the *-s* option. The skeleton path may be specified as a full file-path or as a directory, in which case the skeleton resource file is assumed to be *icmstart.rc* (see below at **SKELETON FILES**). Since **icmstart** uses *cp* to install files, *cp* must be available when **icmstart** should install skeleton files.

## SKELETON FILES

Skeleton resource files may contain comment (empty lines and lines beginning with the hash-mark (*#*)). Comment lines are ignored. Otherwise, lines  should contain specifications of resource **s** to be installed.

The default resource specification file is */etc/icmake/icmstart.rc*, containing:

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

This file is overruled by *~/.icmake/icmstart.rc*. The *~/.icmake* directory (called \`configuration directory’ below) can be prepared using the following system command:

```
    cp -r /etc/icmake ~/.icmake
```

This directory can also contain skeleton files. Default skeleton files are commonly found in */usr/share/icmake*, and could be copied to the configuration directory and referred to by the configuration directory’s file *icmstart.rc*.  See [**icmstart.rc**(7)](/icmstart.rc/7.md) for details about how skeleton files can be referred to *icmstart.rc*.

## CONFIGURATION FILES

The configuration files *icmstart.rc, AUTHOR, YEARS* and *VERSION* are recognized as skeleton files and are, if available, processed by *icmstart*.

If the *-c* option was specified configuration files found in the path specified at this option are used. If not specified or if a file isn’t found then the path *~/icmake* is inspected. If a configuration file isn’t found in *~/icmake* either, configuration files in */etc/icmake* are used.

Configuration files are optional; if absent  *icmstart* can still be used, but normally at least *icmstart.rc* is provided.

In addition to *icstart.rc* consider defining the files *AUTHOR, VERSION,* and *YEARS* in the configuration directory:

- o

  If the file *AUTHOR* exists it should have one line, defining the author of the program. E.g.,

  ```
      #define AUTHOR "Frank B. Brokken <f.b.brokken@rug.nl>"
  ```

  If it does not exist *icmstart* uses the default:\
   *#define AUTHOR ""*.

-

  - o

  If the file *VERSION* exists it should have one line, defining the program’s version. E.g.,

  ```
      #define VERSION "1.00.00"
  ```

  If it does not exist *icmstart* uses the default:\
   *#define VERSION "0.01.00"*.

-

  - o

  If the file *YEARS* exists it should have one line, defining the program’s initial release year or range of release years. E.g.,

  ```
      #define YEARS "2024"
  ```

  or a range of years can be defined:

  ```
      #define YEARS "1992-2024"
  ```

  If it does not exist *icmstart* uses the default:\
   *#define YEARS "yyyy"* where *yyyy* is the current year.

The *AUTHOR, VERSION,* and *YEARS* definitions are combined in one file, called *VERSION*, installed in the top-level directory.

If the file *icmstart.rc* does not exist (or is empty) *icmstart* merely installs the top-level directory, *icmconf* and *VERSION*.

## FILES

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

- o

  **/usr/share/icmake/icmconf** Example of a **icmbuild** configuration file;

- o

  **/usr/share/icmake/CLASSES** Example of a **icmbuild** *CLASSES* file.

- o

  **/etc/icmake/icmstart.rc** Default skeleton resource file.

## SEE ALSO

[**icmake**(1)](/icmake/1.md), [**icmbuild**(1)](/icmbuild/1.md), [**icmconf**(7)](/icmconf/7.md), [**icmstart.rc**(7)](/icmstart.rc/7.md).

## BUGS

Path names containing blanks are not supported.

## 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**).
