icmake(1)
π icmake(1) β A program maintenance utility π
okay so bestie, you're looking at icmake β it's the manual page for the icmake program, a program maintenance (make) utility using a C-like grammar. No cap, this page is long, so buckle up π«Ά
β¨ NAME β¨
icmake β A program maintenance (make) utility using a C-like grammar πΈ
β¨ SYNOPSIS β¨
icmake option(s) [source [dest]] [args]
πΈ DESCRIPTION πΈ
Icmake(1) is a generic tool for program maintenance which can be used as an alternative for, e.g., make(1). It's "generic" in the sense that icmake-scripts β written in a language closely resembling the C programming language β can perform tasks that are traditionally the domain of scripting languages. iconic behavior honestly π
This man-page consists of the following sections:
- ICMAKE V. 13.00.00 covers the changes since icmake version 12.03.00;
- OPTIONS covers icmake's options;
- EXECUTING ICMAKE SCRIPTS covers how to call icmake scripts;
- ICM-DEP describes the
icm-depsupport program; - ICM-MULTICOMP describes the
icm-multicompsupport program; - ICM-SPCH describes the
icm-spchsupport program; - ICM-UN describes the
icm-unsupport program; - FILES provides an overvieuw of the locations of icmake and its support programs (as used by the Debian Linux distribution);
- EXAMPLES contains references to locations containing some examples;
- SEE ALSO contains references to man-pages of icmake support programs and man-pages of programs related to icmake. In particular
icmstart(1), describes how to initialize a directory for (C++ or C) program development;icmbuild(1), covers how to use icmake for the maintenance of such programs.icmscript(7)covers the syntax and facilities of icmake's scripting language, allowing you to write your own icmake scripts.
Icmake allows programmers to use a scripting language (closely resembling the well-known C-programming language) to define the actions that are required for (complex) program maintenance. For this, icmake offers various special operators as well as a set of support functions that have shown their usefulness in program maintenance. it's giving "I contain multitudes" π¦
β οΈ Icmake should not be confused with an Integrated Development Environment (IDE). Icmake merely performs tasks for which scripts can be written, and a minimal set of pre-defined scripts (icmstartandicmbuild) that have proven their usefulness when developing and maintaining programs are included in icmake's distribution. she's a tool, not a whole personality π
When using icmbuild(1) for program maintenance the following icmake support programs are used:
icm-compβ byte-code compiling an icmake script;icm-depβ handling class-dependencies;icm-execβ executing a byte-code compiled icmake script;icm-multicompβ (optionally) using multi-threaded source file compilation;icm-ppβ pre-processing an icmake script;icm-spchβ (optionally) constructing a project-wide Single Pre-Compiled Hbeader file (SPCH).
In addition to the above programs the icmake project provides
- the
icmodmapprogram can be used when developing C++ programs using modules (cf. theicmodmap(1)man-page); icm-undisassembling compiled icmake byte-code files (bim-files).icm-unis primarily used for illustration, education, and debugging and is called by icmake when specifying its option--unassembleor-u(see also section ICMUN).
Some make-utilities by default recompile sources once header files are modified. When developing C++ programs this is often not required, as adding new member functions to classes does not require the recompilatopm of all source files of those classes. Class dependencies are optionally inspected by icmbuld(1) (they are inspected when the USE_ALL, SPCH, and/or (now deprecated) PRECOMP #define directives in the icmconf file are activated (cf. the icmconf(7) man-page for details). π§
π ICMAKE V. 13.00.00 π
In icmake version 13.00.00 the following modifications were implemented w.r.t. its version 12.03.00 β glow-up era fr fr β¨
- option
--all(-a) was added to theicm-spchprogram performing in sequence the actions of its--list,--precompile, and--soft-linkoptions. Several existing options were altered. See the ICM-SPH section for details. π - the (internal) headers inspected by
icmake --spch(or-S) are not modified anymore. π - to remove the (now obsoleted)
#ifndef SPCH_specifications from files listed in existing spch files written by previous versions oficm-spchthe programnoifndef.cc, available in the icmake source distribution in itssupport/sub-directory can be used to remove existing#ifnef SPCH_sections from a project's.ihfiles; π§Ή icmake --sourcecompiles the icmake script to a temporary.bimfile; π- the support program
icmunwas renamed toicm-un(called by icmake when specifying the--unassemble(-u) option, so in practice the name change is automatically handled). π - The
icmconf(7)script can use-oin its#define SPCHspecification. All (space character delimited) words following-oare passed toicm-spchas separate-o wordoptions; π - When developing C++ programs the environment variable
ICMAKE_CXXFLAGSis no longer used. Instead the environment variableICMAKE_CPPSTDis used. Use this latter environment variable to define one point of maintenance specifying the version of the C++ standard used when compiling sources; β - When using Debian (or a comparable distributions) the script
'rebuild'can be used to rebuild icmake's binaries after installing'libbobcat-dev', resulting in a reduction of their sizes of about40%. π₯ - The
icmakeprogram itself was redesigned. main character energy tbh π --about(-a) β shows you some info about icmake and then dips out, donezo β¨--compile(-c) [options] source [bim-file] β your icmake script gets pre-processed first (peep--preprocessbelow for the tea β), and then the pre-processed file gets compiled byicm-comp, which spits out a bim-file. Didn't name a bim-file? No stress βsource's base-name gets the extension.bimand that's your new file π . Ifsourceis already a pre-processed file, you can throw in option-Pto skip the pre-processing step entirely. Like:
icmake -c -P source dest.bim
And lowkey the icon behaviour: if the bim-file already exists and is younger than source, then source does not get compiled. Periodt.
--dependencies(-d) [options] action β calls upicm-dep, the program that figures out the dependencies among your classes π΅οΈββοΈ. Every single option and argument that comes after this one gets forwarded straight toicm-dep. Wanna know more? Slide to theICM-DEPsection of this man-page, iykyk.--execute(-e) [option] bim-file [arguments] β runs the bim-file, obviously π . Before you specifybim-fileyou can drop--no-version-check(or its short twin-n) to let the main version of icmake and the icmake version that compiled the bim-file not match β yeah, they're allowed to differ π. Any command-line arguments you put beyondbim-fileget forwarded as arguments to the bim-file'smainfunction (check theicmscript(7)man-page for the deets on writing icmake-scripts π«Ά).--force(-f) [options] source [bim-file] β same energy as--compile, but compilation is always performed, even if the bim-file is already up-to-date. No skipping, no shortcuts, we compile π₯--help(-h) β shows you usage info and then icmake peaces out π. Plot twist: you also get usage info when you start icmake with no arguments at all.--multicomp(-m) [options] jobs 'compiler-spec' β the optional options here are the ones passed to theicm-multicompprogram (cf. sectionICM-MULTICOMPbelow). Also peek theicomonf(7)man-page's#define MULTICOMPdirective: when that's specified, threaded compilation gets used automatically π§΅β¨--no-process(-N) β implies option--verbose(see below β¬οΈ). This one is recognized by options--dependencies,--execute,--sourceand-tβ either as two separate options, or by "gluing" both options together, like-Ne. When you specify it, the support program is not run, and instead the command(s) that would have been used are shown to the standard output π. Manifesting without the side effects, honestly.--no-version-check(-n) β available with the action options--execute,--source,--unassemble, and-t. When specified, the main versions stored in the specified icm-bim file and icmake itself are allowed to differ. Ngl you should normally not need this one β it was primarily added for development purposes π--preprocess(-p) [options] source [pim-file] β the file you pass as the first argument gets pre-processed, producing a.pimfile π. If you give a second filename argument, that file becomes the.pimfile. If you don't, then the first filename gets used with the extension.pim. With this option you can use pre-processor symbol-defining options: symbols whose values you can then use insource. E.g., when you issue the command
icmake -p -d one --define two source dest.pim
icmake pre-processes source, defines the pre-processor symbols one and two (each having value 1), and produces the pim-file dest.pim. Note that instead of the long options --define, the short options -d work too πββοΈ
--spch(-S) ... β a SPCH gets built π οΈ. Everything after--spchis forwarded to theicm-spchsupport program (cf. sectionICM-SPCHbelow). Also check theicomonf(7)man-page's#define SPCHdirective: when that's specified, a SPCH is automatically constructed β¨--source(-s) [options] source [arguments] β icmake uses--compileto compile the icmake source file you passed as the first argument (constructing a temporary bim-file), and then uses--executeto execute that bim-file, forwarding any subsequent arguments as arguments to the bim-file'smainfunction π«Ά. After the--sourceoption you can specify options that are available for icmake's--compilecommand. After those options, you can specify options of icmake's--executeoptions β and those latter ones must be preceded by--executeor-e. E.g., when you issue the command
icmake -s -d one -en source
then icmake first compiles source after defining the pre-processor symbol one, and then executes the bim-file, passing --no-version-check to icm-exec.
When you're merely compiling icmake source files (using icmake -c), the compiled file by default receives the extension .bim. But when you use icmake -s, temporary files are used β which get removed after executing the constructed binary file ποΈ. When compilation errors show up, the name of the temporary file gets reported. It's made of three parts: the directory receiving icmake's temporary files; the filename of the icmake script which is passed to icmake -s; and a random 6-character extension. E.g., when calling icmake -s script, error messages may refer to /tmp/script.2JS49A π
-ttmpspec [options] source [arguments] β this option is intended for icmake-scripts, although it can also be used in a command-line icmake call. The-toption can be used in quite a few different ways, which is covered in the next section (EXECUTING ICMAKE SCRIPTS) π--tmpdir=directory(-T) β by default temporary files are created in the/tmpsub-directory, or in the user's home (${HOME}) directory if/tmp/can't be used. To specify another directory to write temporary files in, you can specify icmake's option--tmpdir(or-T), followed by the name of an (existing!) directory to use for temporary files. E.g., when compiling an icmake filemain.im, the output of icmake's pre-processor is written to a temporary file which is removed after compilation. To write the temporary file to~/.icmake, icmake can be called as
icmake -T ~/.icmake -c main.im
--unassemble(-u) β the file specified as first argument is an icmake bim-file, which gets unassembled π§ (cf. sectionICM-UNbelow for more info about unassembling icmake bim-files).--verbose(-V) β icmake child processes and their arguments are written to the standard output stream before they get called π’. This option may precede "action" options (-c,-d,-e,-sand-u), either as two separate options or by "gluing" both options together, like-Veπ--version(-v) β displays its version and then icmake ends. Bye bestie πβ¨
π¦ EXECUTING ICMAKE SCRIPTS π¦
The -t option is available primarily for being used in executable icmake scripts. The first line of executable icmake scripts is made up of these components:
- a shebang (
#!) specification followed by icmake's location; - the
-toption followed by its argument (see below β¬οΈ);
and optionally:
- compilation and execution options (specified as described at the
--sourceoption); - a non-option component (e.g.,
:) which will be replaced by the location of the executable icmake script; - remaining components on the first line are forwarded as-is to the icmake script's
mainfunction;
E.g., the following simple icm executable script args could be defined in ~/bin:
#!/usr/bin/icmake -t. -d one : two --dir three
void main(int argc, list argv)
{
#ifdef one
printf << "one is defined\n";
#endif
printf << argc << " arguments: " << argv << '\n';
}
When it's called as ~/bin/args four five, then the arguments four and five are added to the two --dir three arguments already specified by the script itself π. Called this way the script outputs β its 1st argument is the name of a temporary .bim file whose final extension is different at each new call (see also this section's final paragraph):
one is defined
/tmp/args.F04dgh two --dir three four five
The argument of the -t option is used to specify the location of the files used by icmake's -t option (/dir can also be specified as multiple directories, like /dir/sub1/sub2):
- if it's a single dot (
-t.), the compiled (temporary) bim-file is written in icmake's directory used for temporary files (e.g.,/tmpor$HOME) π ; - if it's
~/diror/dir, then icmake writes temporary files in the specified directory, replacing~by the user's$HOMEdirectory; - if it's
~/dir/nameor/dir/name, then[~]/dir/namespecifies the path of the compiled.bimfile, writing all other temporary files in the same directory as the.bimfile. The.bimfile is kept after execution (allowing it to be executed repeatedly using'icmake -e') π. The icmake-script is not compiled if the.bimfile is younger than the script.
When executing icmake scripts (either by using executable #/bin/icmake scripts or explicitly calling icmake -t) the preprocessed scripts and usually the compiled script are temporary files β which get removed after executing the constructed binary file ποΈ. When errors are encountered, the name of the temporary file containing the errors gets reported. Those temporary files are made of three parts: the directory receiving icmake's temporary files; the filename of the icmake script which is passed to icmake -s; and a random 6-character extension. E.g., when executing a script like showfiles (using #!/bin/icmake -t .) and the script contains errors, then the error messages may refer to /tmp/showfiles.2JS47P ππ
πΈ ICM-DEP πΈ
Okay so Icm-dep is a little support program that icmake --dependencies (or its short lil' alternative -d) calls out to, and its whole personality is figuring out source- and precompiled-header file dependencies. It's giving "backstage crew" energy β you don't see it, but nothing works without it. π«Ά
Quick vibe check though: when you're using icmbuild(1) and an icmconf file has the #define SPCH directive, then icmake -d is not used β instead, the directories inspected when using a SPCH are automatically inspected (and updated when necessary) by icmake -S. So like, don't manually call the girl, she's already on it. π
icmake -d's synopsis is
icmake -d [options] argument
Whatever you put after -d gets forwarded straight to icm-dep. Your options, bestie:
--classes=filename (-c) β By default,icm-depinspects the dependencies of the directories mentioned in the fileCLASSES. But if theicmconf(7)file specifiesPARSER_DIRand/orSCANNER_DIR, then those directories are also considered. Use this option to specify the file containing the names of the directories thaticm-depshould inspect. Custom guest list, basically. β¨--gchβ If anicmconffile specifies the (deprecated π)#define PRECOMPdirective, thenicmake -dchecks whether precompiled headers must be refreshed. If anicmconffile does not contain a#define PRECOMPdirective, but precompiled headers should nonetheless be inspected, then you can pass option--gch.--help(-h) β A summary oficm-dep's usage gets written to the standard output andicmaketerminates, returning0to the operating system. The "hey bestie here's how I work" option. π--icmconf=filename (-i) β By defaulticmake -dinspects the content oficmconffiles. Use this option if, instead oficmconf, some other file should be inspected. Swapping the whole vibe.--mainih=mainheader (-m) β In theicmconffile the#define IHdirective specifies the suffix of class header files that should be precompiled, assuming their filenames are equal to the names of the directories listed in theCLASSESfile. But β plot twist βCLASSESdoes not specify the name of the program's top-level directory. So this option specifies the name of the top-level header file to precompile. By defaultmain.ihis used. π--no-gchβ If anicmconffile contains a (deprecated)#define PRECOMPdirective, buticmake -dshould not check whether precompiled headers must be refreshed, then specify option--no-gch. Respectfully declining, no cap.--no-use-allβ If this option is specified then the#define USE_ALL "filename"directive in theicmconffile (cf.icmconf(7)) is ignored. Like leaving it on read. π--use-all=filename β If this option is specified then all files in directories containing the file filename and source files in directories (recursively) depending on the files in those directories are recompiled. Recursive recompile era. π₯--verbose(-V) β This option can be specified multiple times, and the number of times it's specified determines the verbosity oficmake -d's output. Not specified?icmake -dsilently performs its duties (quiet queen π). Specified once (which is the default specification)? Thenicmake -dwrites to the standard output the actions it performs. Specified twice? It also reports non-default options and automatically included directories. Three times? It also reports class dependencies. More often than that? It reports what files it encountered and what decision it would make whengowould be specified. She's telling you everything, fr fr. π--version(-v) βIcmake -dwritesicm-dep's version number to the standard output and terminates, returning0to the operating system. Little flex, then dip. βοΈ
Following the non-terminating options, argument go must be specified to allow icmake -d to actually perform its actions. Specifying another argument results in a dry run: it analyzes dependencies, but won't remove or touch files. Basically window shopping. ποΈ
Heads up bestie: it'sgoor nothing. Nogo, no action β just vibes and analysis.
Icmake -d can be used for software projects which are developed as described in the C++ Annotations, section Header file organization in chapter Classes. For those projects, classes are developed in their own directories, which are direct sub-directories of the project's main program directory. Their class interfaces are provided in class-header files bearing the names of the class-directories, and all headers that are required by the class's sources are declared in a separate internal header files, commonly having extensions .ih. Iconic structure, lowkey. π¦
π ICM-MULTICOMP π
Icmake supports multi-threaded source-file compilation, which often significantly reduces the compilation time of the source files of projects. Multitasking main character energy. β
When you're using icmbuild(1), multi-threaded compilation is automatically used when icmconf files contain the #define MULTICOMP directive (cf. icmconf(7)). It can also be called independently from icmconf using icmake's --multicomp (or -m) option. She doesn't need the config file, she just likes it. π
Icmake -m's synopsis is
icmake -m [options] arguments
Icmake -m accepts the following options:
--help(-h) βIcmake -mwrites a summary of its usage to the standard output and terminates, returning0to the operating system. The classic "what do I do again" button. π«Ά--nr(-n) β When compiling source files and option--nris specified, the thread number compiling a source file is written to the standard output stream. So you can see which lil worker bee did what. π--quiet(-q) β When this option is not specified then the path names of the compiled object and source files are written to the standard output stream. When it's specified once, only the source files' directories and filenames are written to the standard output stream, and when it's specified more than once, no information about the compiled files is written to the standard output stream. Levels of shyness, we love a range. π--threads=nThreads (-t) β By default the computer's number of cores determines the number of threads being used when compiling the source files. A different number of threads can be requested using this option, e.g.,--threads 5. Go off, control the chaos. π₯--version(-v) βIcmake -mreports its version number to the standard output and terminates, returning0to the operating system.
Icmake -m needs one command-line argument and an optional second argument. Let's break it down:
- the first argument is the name of the file specifying which files must be compiled. Use
icmbuild(1)to write this file. It can also be constructed otherwise: the specified file must contain groups of file specifications where each group starts with a line like: support tmp/o 5where the 2nd element (here:support) specifies the (sub-)directory of the source files (use.to refer to the project's top-level directory); the 3rd element (here:tmp/o) specifies the destination directory of the compiled files (which is created if not existing); and the 4th element (here:t) specifies the prefix to add in front of the compiled object files. Following this line, the remaining lines of a group specify the names of the source files (located in the specified (sub-)directory) to compile. Once the compilation ends (either because all files were successfully ccompiled, or because a compilation failed) the specification file is removed. Self-destructing manifest, honestly iconic. πβ¨ - the second argument is optional. By default the following specification is used (all on one line):
g++ -c -o $2 ${ICMAKE_CPPSTD} --Wall -Werror $1
Here $1 is replaced by the location of the source file to compile and $2 is replaced by the location of the compiled object file. If the environment variable ICMAKE_CPPSTD is defined (specifying the C++ standard to use, e.g., ICMAKE_CPPSTD=--std=c++26) then its value replaces ${ICMAKE_CPPSTD} in the specification.
If the default compiler specification cannot be used, the command to compile source files can be provided as icmake -m's second command-line argument, which should be quoted, like
βg++ -c -o $2 β${ICMAKE_CPPSTD}β --Wall -Werror $1β
or the second command-line argument can be f:file, where file is the name of a file whose first line contains the specification of the command compiling source files (which must specify $1 and $2 and optionally $ICMAKE_CPPSTD).
Tea time β: the PATH environment variable is used to locate the compiler; the compiler's absolute path can also be specified. Either way, she'll find it. π
π ICM-SPCH π
okay so Single Pre-Compiled Headers (SPCH, yes that's the acronym, slay) are a thing you get with icmake --spch β or the short version, -S. π
The synopsis for icmake -S is literally:
icmake -S [options] arguments
And here's every single option it takes, no skipping, bestie:
--all=file (-a) β callsicm -S's options--list,--precompile, and--soft-linksin sequence (all three are described further down), where file is written by--listand then used as the option argument for--precompileand--soft-links.icmake -S --all filecan optionally be followed by one or two arguments. If you give them, the first one sets the location of the SPCH file, and the second one sets the (file containing the) compiler command used to build the SPCH. Details live at--precompilebelow.--classes=filename (-c) β filename is the name of a file holding a list of directories that the--listoption inspects (default isCLASSES). Your project's top directory gets inspected automatically, unless you pass--no-topdir;--help(-h) βicmake -Swrites a lil summary of its usage to standard output and then peaces out, returning0to the operating system;--internal=.ext (-i) β .ext is the extension used for the internal headers (dot included, don't forget it). Default is.ih;--list(-l) β ignored when--allis specified. Writes the names of the files to process when constructing an SPCH to the file given asicmake -S's first command line argument. That filename can't have an extension or directory specifications (likespch);--no-topdir(-n) β ignore the internal header found in the project's top directory. You'd use this when, e.g., you're merely constructing a library instead of a program;--option=opt (-o) β an extra option added to the compiler's options when--precompileis requested. The opt option gets inserted before the compiler's option specification-x(peep the next option,--precompile). You can specify multiple--optionoptions;--precompile=file (-p) β precompiles file (the name of the file you gave at--list) into the SPCH file specified asicmake -S's first command-line argument. If that argument ends in/then the SPCH 'argument'file.gchis written instead. By default the SPCH is constructed with this command (all on one line, fr):
g++ -c -o $2 ${ICMAKE_CPPSTD} -Wall -Werror -O2 -x c++-header $1
Here $1 gets replaced by 'file', and $2 gets replaced by the name of the SPCH, while $ICMAKE_CPPSTD refers to the value of the ICMAKE_CPPSTD environment variable (which specifies the C++ standard to use, e.g. ICMAKE_CPPSTD=--std=c++26). Alternatively, the command that constructs the SPCH can be handed in as the second command-line argument, and it should be quoted. Like, e.g. (one line):
'g++ -c -o $2 '${ICMAKE_CPPSTD}' -Wall -Werror -O2 -x c++-header $1'
or that second command-line argument can be f:file, where file is the name of a file whose first line specifies the command constructing the SPCH (which must specify $1 and $2 and optionally $ICMAKE_CPPSTD). The PATH environment variable is used to locate the compiler; you can also just use the compiler's absolute path.
--quiet(-q) β by default the (g++) command constructing the single precompiled header file is echoed to standard output. Specify this option to suppress writing the command to standard output.--soft-links=file (-s) β ignored when--allis specified. This option uses the same arguments as--precompile. It creates.gchsoft-links from the header files listed in file to the generated SPCH file;--unused=regex (-u) β in practice you probably won't need this, but files matching the (POSIX extended) regex are not inspected byicmake -S. When you use it, specs like(...)|(...)let you specify multiple regexes. Alternativelyf:file can be used as the option argument to specify a file whose non-empty lines contain regexes;--version(-v) βicmake -Swrites its version number to standard output and terminates, returning0to the operating system;--warn(-w) β interactively warn when existing header files are about to be modified, letting you accept or refuse the modifications. Once you refuse,icm-spchends.
icmake -S needs one argument, and optionally two β all described above at --list, --precompile, and --soft-links. π«Ά
Pre-compiled headers have been around for quite a while and usually give a significant reduction in compilation time. And using single precompiled headers gives a large reduction in the disk space you need, compared to using precompiled headers for separate directories. β¨
When you use SPCHs, almost-identical precompiled headers for separate directories get avoided: only one precompiled header is constructed, and then every component of a project uses it. Because identical sections are avoided, the sizes (and construction times) of SPCHs are way smaller β usually only like 5 to 10 % of the space (and construction time) compared to using separately constructed pre-compiled headers. π₯
SPCHs are super easy to use together with icmbuild(1). Often a specification in a project's icmconf file like #define SPCH "" is literally all it takes (cf. icmconf(7)). π
π¦ ICM-UN π¦
The support program icm-un is called by icmake -u, and it expects one argument: a bim-file. It disassembles that binary file and shows you the assembler instructions plus the structure of the bim-file.
So as an illustration, imagine this script gets compiled by icmake -c demo.im:
void main()
{
printf << "hello world\n";
}
then the resulting demo.bim file gets disassembled by icmake -u demo.bim, which writes the following to the standard output file (yes, "fle" in the original, we don't gatekeep typos):
icm-un by Frank B. Brokken (f.b.brokken@rug.nl)
icm-un V12.04.00
Copyright (c) GPL 1992-2024. NO WARRANTY.
Binary file statistics:
strings at offset 0x0025
variables at offset 0x0033
filename at offset 0x0033
code at offset 0x0014
first opcode at offset 0x0021
String constants dump:
[0025 (0000)] ""
[0026 (0001)] "hello world."
Disassembled code:
[0014] 06 01 00 push string "hello world."
[0017] 05 01 00 push int 0001
[001a] 1b 1d callrss 1d (printf)
[001c] 1c 02 add sp, 02
[001e] 04 push int 0
[001f] 24 pop reg
[0020] 23 ret
[0021] 21 14 00 call [0014]
[0024] 1d exit
Offsets are shown in hexadecimal and they're absolute byte offsets in the bim-file. The string constants dump also shows, between parentheses, the offsets of the individual strings relative to the start of the strings section. The output also shows the opcodes of the instructions of the compiled .im source files. If opcodes use arguments, then those argument values show up after their opcodes. Every opcode line ends by showing the opcode's mnemonic plus (if applicable) the nature of its argument. π§
πΈ FILES πΈ
The paths mentioned here are the ones used in the source distribution and by the Debian Linux distribution. But ngl they're suggestive only and might have been configured differently:
Binary programs:
/usr/bin/icmake: the mainicmakeprogram;/usr/bin/icmbuild: the wrapper program around theicmbuildscript handling standard program maintenance;/usr/bin/icmodmap: the module mapper which initializes the maintenance of C++ programs using modules;/usr/bin/icmstart: an icmake-script that can be used to create the startup-files of new projects;
Support programs:
/usr/libexec/icmake/icm-comp: the compiler called byicmake;/usr/libexec/icmake/icm-dep: the support program handling class-dependencies;/usr/libexec/icmake/icm-exec: the byte-code interpreter;/usr/libexec/icmake/icm-multicomp: the multi-thread source file compiler;/usr/libexec/icmake/icm-pp: the preprocessor called byicmake;/usr/libexec/icmake/icm-spch: the program preparing SPCHs;/usr/libexec/icmake/icm-un: the icmake unassembler.
β EXAMPLES β
The distribution (usually in /usr/share/doc/icmake) contains a directory examples with additional examples of icmake script. The icmstart script is an icmake script, and so is /usr/libexec/icmake/icmbuild, which is called by the /usr/bin/icmbuild program. Also go peek at the EXAMPLE section in the icmscript(7) man-page. π
π SEE ALSO π
chmod(1), icmbuild(1), icmconf(7), icmodmap(1), icmscript(7), icmstart(1), icmstart.rc(7), make(1)
π BUGS π
None reported. (iconic behaviour, honestly)
π 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).
and that's a wrap on the whole page, bestie π«Ά this was icmake.13.07.00, dated 1992-2026 β go forth and compile, mwah π
β¨
π¦ where this page comes from
- arch rolling: icmake 13.07.00-1 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms