---
name: "zmk.Symlink"
section: "5"
platform: "linux"
package: "zmk-doc"
version: "0.5.1-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/zmk.Symlink"
---

# zmk.Symlink(5)

template for creating symbolic links

## NAME

**Symlink** – template for creating symbolic links

## SYNOPSIS

```
include z.mk
# "link" is any valid identifier.
link.SymlinkTarget = target
$(eval $(call ZMK.Expand,Symlink,link))
```

## DESCRIPTION

The template **Symlink** once *expanded* with a *link* *name* to creates rules for creating, removing, installing and removing a single symbolic link to a given target file.

This template behaves like the Program template, in that it creates the symbolic link both locally, during development as well as when the project is installed.

## TARGETS

This module provides the following targets.

### $(link)

This target represents the symbolic link

### all

This *phony* target depends on *$(link)*

### clean

This *phony* target removes *$(link)*

### install

This target creates the symbolic link *$(link)* in *$(link.InstallDir)*, with the name *$(link.InstallName)* The target directory is automatically created if required.

### uninstall

This *phony* target removes *$(link)* as installed by the *install* target.

## VARIABLES

This module provides the following variables.

### $(link).SymlinkTarget

The target of the symbolic link.

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

### $(programName).InstallDir

The directory *$(link)* is installed to.

There is no default value. This variable must be set before *expanding* the template. To avoid installation set the install directory to the special value *noinst*.

### $(link).InstallName

The name of the program after installation.

The default value is *$(link)* with the directory part removed.

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

## BUGS

Prior to version 0.5.1, the *install* target misbehaved when *$(link)* contains a non-empty directory prefix. Incorrectly, the same prefix is replicated, somewhat confusingly in the installed symlink.

Consider this example:

```
include z.mk
subdir/link.SymlinkTarget = target
subdir/link.InstallDir = $(bindir)
$(eval $(call ZMK.Expand,Symlink,subdir/link))
```

Running *make* *install* on the following example would create the symbolic link *$(bindir)/subdir/link* *-\>* *target,* which was unexpected.

This bug was given the identifier *zmk-issue-80*.

## HISTORY

The **Symlink** template first appeared in zmk 0.1

## AUTHORS

Zygmunt Krynicki ⟨*me@zygoon.pl*⟩
