zmk.Program(5)

NAME
Program - template for compiling C/C++/ObjC programs

SYNOPSIS

    include z.mk
    # programName is any valid identifier.
    programName.Sources = hello.c
    $(eval $(call ZMK.Expand,Program,programName))

DESCRIPTION
The template Program once expanded with a program name to creates rules for compiling, cleaning, installing and removing a single program written in C, C++ or Objective C.

Source files are compiled to object files prefixed with $(programName)-, so that a single source file can be compiled separately with distinct preprocessor, compiler and linker options.

When cross-compiling for Windows or DOS, the $(exe) variable expands to .exe

TARGETS
This module provides the following targets.

  $(programName)$(exe)
This target represents the program executable.

  all
This phony target depends on $(programName)$(exe)

  clean
This phony target removes $(programName)$(exe) as well as constituent object files and dependency files.

  install
This phony target copies $(programName) to $(programName.InstallDir), with the name $(programName.InstallName) and mode $(programName.InstallMode). The target directory is automatically created if required.

The variables Configure.ProgramPrefix, Configure.ProgramSuffix and Configure.ProgramTransformName automatically impact the installed names of all the programs.

  uninstall
This phony target removes $(programName)$(exe) as installed by the install target.

VARIABLES
This module provides the following variables.

  $(programName).Sources
List of source files to compile.

There is no default value. This variable must be set before expanding the template.

  $(programName).Objects
List of object files to link.

The default value is all the elements of $(programName).Sources with the added prefix $(programName)- and with the extension replaced by .o.

  $(programName).Linker
Linker required to link object files together.

The default value depends on the type of source files used, ensuring that C++ sources are linked with the C++ linker.

  $(programName).InstallDir
The directory $(programName)$(exe) is installed to.

The default value is $(bindir) but $(sbindir) or $(libexecdir) are commonly used as well. The special value noinst disables the rules related to installation and uninstallation.

  $(programName).InstallName
The name of the program after installation.

The default value is $(programName)

  $(programName).InstallMode
The UNIX mode $(programName)$(exe) is installed with.

The default value is 0755.

  DESTDIR
Path added to all installation targets.

This variable is normally set externally, to install a compiled program into a staging area during construction of a compiled binary package.

  CFLAGS, CXXFLAGS, OBJCFLAGS
Options for the C, C++ and the Objective C compiler, respectively.

  CPPFLAGS
Options for the preprocessor.

IMPLEMENTATION NOTES
Program uses InstallUninstall to handle installation and removal. The exe variable is automatically set to .exe where appropriate.

EXAMPLES
With the following true_false.c file:

    #include <stdlib.h>
    int main(void) {
    	return EXIT_CODE;
    }

The following Makefile builds the classic programs true and false.

    include z.mk
    true.Sources = true_false.c
    $(eval $(call ZMK.Expand,Program,true))
    true$(exe): CPPFLAGS += -DEXIT_CODE=EXIT_SUCCESS
    false.Sources = true_false.c
    $(eval $(call ZMK.Expand,Program,false))
    false$(exe): CPPFLAGS += -DEXIT_CODE=EXIT_FAILURE

HISTORY
The Program template first appeared in zmk 0.1

AUTHORS
Zygmunt Krynicki <me@zygoon.pl>