Provided by: icmake_13.02.00-1ubuntu1_amd64 bug

NAME

       icmbuild - A generic, C++/C program maintenance facility

SYNOPSIS

       icmbuild [-h] [-c] args

DESCRIPTION

       Icmbuild  is  a  small C++ program calling icmake(1) to do program maintenance as defined by the icmbuild
       script (commonly found in /usr/libexec/icmake).

       Icmbuild’s actions are tailored through a configuration file (icmconf)  which  must  be  present  in  the
       directory  where  program  maintenance is requested. This file is automatically installed by icmstart(1).
       Refer to icmconf(7)’s man-page for details about this file.

       Icmbuild assumes that your sources exist in and below the current working directory. The file icmconf  in
       icmake(1)’s  distribution  provides  an  example of an icmconf file that can be used by icmbuild. In that
       example it is assumed that a C++ project is maintained, but program maintenance for, e.g.,  a  C  project
       can  also  easily  be  configured.  If  icmbuild  is  called,  but icmconf is not available it displays a
       usage-summary after which icmbuild ends.

       Icmbuild() handles the maintenance for all sources in each  of  the  subdirectories  named  in  the  file
       CLASSES,  and  also of all sources in the current working directory. `Maintenance’ involves compiling all
       as yet uncompiled source files, recompilation of modified source files,  optionally  library  maintenance
       and  optionally  constructing  a  Single  Pre-Compiled  Header  (SPCH)  and  multi-threaded  source  file
       compilation, resulting in a marked reduction of source compilation times.

       When source files are compiled object files result which may be stored in a library,  against  which  the
       object file of the program’s main function is linked. It is also possible to specify additional libraries
       against which the program must be linked.

       If a library is constructed it is kept up to date by icmbuild. When a source is successfully compiled its
       new  object  module  replaces  the old one in the library. At that point the separate object files are no
       longer required and are removed by icmbuild.

KICK-STARTING ICMBUILD

       To use icmbuild do as follows:

       o      Install icmbuild in your path (icmake’s installation procedure should already have taken  care  of
              that);

       o      Copy  icmconf  (and probably a file CLASSES) to your project’s base directory (i.e., the directory
              where and below which the project’s sources are found). Usually this has already been  taken  care
              of by the (icmstart) script;

       Next:

       o      Modify the #defines in the file icmconf to taste;

       o      Enter the names of subdirectories containing sources on separate lines in the file CLASSES

              Note  that  the  order  of  the  classes  mentioned  in  CLASSES  is  relevant  in  that new class
              (subdirectory) names can always be added to the end of the file CLASSES. Reordering the  lines  in
              the  CLASSES  file  should be avoided as that most likely results in overwriting identically named
              object files from already existing directories.

              If reordering is necessary, then first run the command icmbuild clean to  remove  all  files  that
              were  thus  far  created  by icmbuild. Recompilation is necessary as the names of the object files
              contain class order-numbers for  identification.   These  class-order  numbers  prevent  file-name
              collisions  (e.g.,  two  classes  might  use  a  file  data.cc) and because of the number-prefixes
              replacement of a file x.o from class A by file x.o from class B is prevented;

       o      Start icmbuild.

       The next section covers icmbuild’s  modes of operation.

OPTIONS

       Icmbuild recognizes three options of which only one can be  specified.  See  the  following  section  for
       information about which option is recognized by which icmbuild command.

       o      -h:  display  usage information (which is also automatically shown when the current directory does
              not contain a file icmconf) and terminate icmbuild;

       o      -c: clear the screen (by calling tput clear) before starting the compilation process;

       o      -s: strip the compiled program or library at its installation directory (see the  various  install
              modes below).

ICMBUILD COMMANDS

       Icmbuild recognizes the following commands (possible options are shown between square brackets). With the
       install commands a path argument must be specified, which must be an existing user-writable directory:

       o      clean
              clean up remnants of previous actions (the directory specified by the TMP_DIR define in icmconf is
              removed).  If  precompiled  headers were created (i.e., PRECOMP in icmconf was specified) then all
              files having extension .gch in the main directory and in the directories  listed  in  the  CLASSES
              file are also removed. If USE_ALL was specified then those files are also removed;

       o      cleangch
              all  .gch files that were precompiled are removed (whether existing in the gch subdirectory of the
              TMP_DIR directory (specified in icmconf), or in directories specified in the CLASSES file,  or  in
              the project’s main directory). If icmconf does not specify PRECOMP then nothing happens;

       o      cleantmp
              same  as  icmbuild  clean, but the .gch files and files specified by the USE_ALL define in icmconf
              are not removed;

       o      [-s] install program path
              install the constructed program in the specified path (to be used after issuing icmbuild  program,
              see  below). Path can be absolute or relative and may optionally specify the name of the installed
              program. Example:

                  icmbuild install program ~/bin/prog

              This installs the constructed binary program in the user’s bin directory with the name prog;

       o      [-s] install static path
              install the constructed static library in the specified path (to be used  after  issuing  icmbuild
              library,  see below).  Path can be absolute or relative and may optionally specify the name of the
              installed library. Example:

                  icmbuild install static /usr/lib/

              This installs the constructed static library (assume its name  is  libspecial.a)  in  /usr/lib  as
              /usr/lib/libspecial.a.

       o      [-s] install shared path when using this installation command, icmconf must contain #define SHARED
              (cf.  icmconf(7)).  It  installs  the constructed shared library in the specified path (to be used
              after issuing icmbuild library). Path can be absolute or relative, and must  specify  an  existing
              directory. Example:

                  icmbuild install shared /usr/lib/

              This  installs  the  constructed  binary  shared  library  (e.g.  libspecial.so)  in  /usr/lib  as
              /usr/lib/libspecial.so. In addition, the soft-links

                  libspecial.so -> libspecial.so.X
                  libspecial.so.X -> libspecial.so.X.Y.Y.Z

              are defined in /usr/lib, where X.Y.Z are the major, minor and subminor  versions  defined  in  the
              file VERSION.

       o      [-c] library
              do  library  maintenance  (builds  a  static  and  optionally (if icmconf defines SHARED) a shared
              (dynamic) library);

       o      [-c] program
              do program maintenance (builds a program from the sources in the  current  working  directory  and
              from the sources in the directories specified in the file CLASSES);

       o      If no commands are specified (but optionally only -c) then the DEFCOM specification in the icmconf
              is inspected. Recognized specifications are:

                  #define DEFCOM "program"

              which is quivalent to the command icmbuild [-c] program;
              if DEFCOM is specified as

                  #define DEFCOM "library"

              then this is quivalent to the command icmbuild [-c] library.

              If an explicit command is passed to icmbuild then DEFCOM specifications are ignored.

ICM-DEP

       Class  dependencies  are  handled  by icmake’s support program icm-dep. It can be called from icmake when
       specifying option -d. All options and arguments following -d are forwared to icm-dep.

       The program icm-dep is automatically called by icmbuild  to  handle  class  dependencies.  Refer  to  the
       icmake(1) manpage, section ICM-DEP for a description of the icm-dep program.

       By  default  icmbuild  calls  icmake  -d  -V  go: icm_dep is called to perform its duties and to show its
       actions on the standard output stream. By specifying a #define ICM_DEP parameter in the icmconf file this
       default can be overruled (cf. icmconf(7)).

FILES

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

       o      /usr/share/icmake/icmconf Unabbreviated example of an icmbuild configuration file;

       o      /usr/share/icmake/CLASSES Example of an icmbuild CLASSES file.

EXAMPLES

       Here is an example of the configuration file icmconf for a concrete  program,  using  facilities  of  the
       bobcat library:

           #define CLS
           #define LIBRARY             "ofiles"
           #define MAIN                "main.cc"
           #define SOURCES             "*.cc"
           #define OBJ_EXT             ".o"
           #define SHAREDREQ           ""
           #define TMP_DIR             "tmp"
           #define USE_ALL             "a"
           #define USE_ECHO              ON
           #define CXX                 "g++"
           #define CXXFLAGS            "-Wall -Werror -O2"
           #define IH                  ".ih"
           #define MULTICOMP           "jobs -q"
           #define SPCH                ""
           #define REFRESH
           #define LDFLAGS             ""
           #define ADD_LIBRARIES       "bobcat"
           #define ADD_LIBRARY_PATHS   ""

           #define DEFCOM              "program"

SEE ALSO

       icmake(1), icmconf(7), icmstart(1), icmstart.rc(7)

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

icmake.13.02.00                                     1992-2025                                        icmbuild(1)