This version of the documentation is NOT an official release. You are looking at ‘latest’, which is in active and ongoing development. You can change versions on the bottom left of the screen.

CMake Options for NEST

NEST is installed with cmake (at least v3.12). In the simplest case, the commands:

cmake -DCMAKE_INSTALL_PREFIX:PATH=<nest_install_dir> <nest_source_dir>
make install

should build and install NEST to /install/path, which should be an absolute path.

Choice of compiler

We systematically test NEST using the GNU gcc and the Clang compiler suites. Compilation with other up-to-date compilers should also work, but we do not regularly test against those compilers and can thus only provide limited support.

To select a specific compiler, please add the following flags to your cmake line:


Options for configuring NEST

NEST allows for several configuration options for custom builds:

Change NEST behavior:

-Dtics_per_ms=[number]     Specify elementary unit of time. [default 1000.0]
-Dtics_per_step=[number]   Specify resolution. [default 100]

Add user modules:

-Dexternal-modules=[OFF|<list;of;modules>]  External NEST modules to be linked
                                            in, separated by ';'. [default=OFF]

Connect NEST with external projects:

-Dwith-music=[OFF|ON|</path/to/music>] Request the use of MUSIC. Optionally
                                       give the directory, where MUSIC is installed.

Change parallelization scheme:

-Dwith-mpi=[OFF|ON|</path/to/mpi>]  Request compilation with MPI. Optionally
                                    give directory with MPI installation.
-Dwith-openmp=[OFF|ON|<OpenMP-Flag>]  Enable OpenMP multi-threading.
                                      Optional: set OMP flag. [default=ON]

Set default libraries:

-Dwith-gsl=[OFF|ON|</path/to/gsl>]           Find a gsl library. To set a specific
                                             library, set install path.[default=ON]
-Dwith-readline=[OFF|ON|</path/to/readline>] Find a GNU Readline library. To set
                                             a specific library, set install path.
-Dwith-ltdl=[OFF|ON|</path/to/ltdl>]         Find an ltdl library. To set a specific
                                             ltdl, set install path. NEST uses the
                                             ltdl for dynamic loading of external
                                             user modules. [default=ON]
-Dwith-python=[OFF|ON]                       Build PyNEST. [default=ON]
-Dcythonize-pynest=[OFF|ON]                  Use Cython to cythonize pynestkernel.pyx.
                                             If OFF, PyNEST has to be build from
                                             a pre-cythonized pynestkernel.pyx.

Change compilation behavior:

-Dstatic-libraries=[OFF|ON]     Build static executable and libraries. [default=OFF]
-Dwith-optimize=[OFF|ON|<list;of;flags>]       Enable user defined optimizations. Separate
                                               multiple flags by ';'.
                                               [default OFF, when ON, defaults to '-O3']
-Dwith-warning=[OFF|ON|<list;of;flags>]        Enable user defined warnings. Separate
                                               multiple flags by ';'.
                                               [default ON, when ON, defaults to '-Wall']
-Dwith-debug=[OFF|ON|<list;of;flags>]          Enable user defined debug flags. Separate
                                               multiple flags by ';'.
                                               [default OFF, when ON, defaults to '-g']
-Dwith-intel-compiler-flags=[<list;of;flags>]  User defined flags for the Intel compiler.
                                               Separate multiple flags by ';'.
                                               [defaults to '-fp-model strict']
-Dwith-libraries=<list;of;libraries>           Link additional libraries. Give full path.
                                               Separate multiple libraries by ';'.
                                               [default OFF]
-Dwith-includes=<list;of;includes>             Add additional include paths. Give full
                                               path without '-I'. Separate multiple include
                                               paths by ';'. [default OFF]
-Dwith-defines=<list;of;defines>               Additional defines, e.g. '-DXYZ=1'.
                                               Separate multiple defines by ';'. [default OFF]

Configuring NEST for Distributed Simulation with MPI

NEST supports distributed simulations using the Message Passing Interface (MPI). Depending on your setup, you have to use one of the following steps in order to add support for MPI:

  1. Try -Dwith-mpi=ON as argument for cmake.

  2. If 1. does not work, or you want to use a non-standard MPI, try -Dwith-mpi=/path/to/my/mpi. The mpi directory should contain the include, lib and bin subdirectories of the MPI installation.

  3. If 2. does not work, but you know the correct compiler wrapper for your installation, try adding the following to the invocation of cmake:

    -DMPI_C_COMPILER=myC_CompilerWrapper -Dwith-mpi=ON

When running large-scale parallel simualations and recording from many neurons, writing to ASCII files might become prohibitively slow due to the large number of resulting files. By installing the SIONlib library and supplying its installation path to the -Dwith-sionlib=<path> option when calling cmake, you can enable the recording backend for binary files, which solves this problem.

If you compiled NEST with support for MPI and also want to run the corresponding tests, you have to tell it about how your mpirun/mpiexec command works by defining the mpirun function in your ~/.nestrc file. The file already contains an example implementation that should work with the OpenMPI implementation. For more details, see the documentation on the Configuration Options.

See the Guide to parallel computing to learn how to execute threaded and distributed simulations with NEST.

Support for libneurosim

In order to allow NEST to create connections using external libraries, it provides support for the Connection Generator Interface from libneurosim. To request the use of libneurosim, you have to use the follwing switch for the invocation of cmake. It expects either ON or OFF, or the directory where libneurosim is installed:


For details on how to use the Connection Generator Interface, see the guide on connection management.

Disabling the Python Bindings (PyNEST)

To disable Python bindings use:


as an argument to cmake.

Please see the README for details.

Python Binding (PyNEST)

Note that since NEST 3.0, support for Python 2 has been dropped. Please use Python 3 instead.

cmake usually autodetects your Python installation. In some cases cmake might not be able to localize the Python interpreter and its corresponding libraries correctly. To circumvent such a problem following cmake built-in variables can be set manually and passed to cmake:

 PYTHON_EXECUTABLE ..... path to the Python interpreter
 PYTHON_LIBRARY ........ path to libpython
 PYTHON_INCLUDE_DIR .... two include ...
 PYTHON_INCLUDE_DIR2 ... directories

e.g.: Please note ``-Dwith-python=ON`` is the default::
 cmake -DCMAKE_INSTALL_PREFIX=<nest_install_dir> \
       -DPYTHON_EXECUTABLE=/usr/bin/python3 \
       -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.4m.so \
       -DPYTHON_INCLUDE_DIR=/usr/include/python3.4 \
       -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python3.4m \

Compiler-specific options

NEST has reasonable default compiler options for the most common compilers.

Intel compiler

To ensure that computations obey the IEEE754 standard for floating point numerics, the -fp-model strict flag is used by default, but can be overridden with


Portland compiler

Use the -Kieee flag to ensure that computations obey the IEEE754 standard for floating point numerics.