CMake is the most widely used C++ build system, so liblsl and most labstreaminglayer apps use it to build binaries for all major platforms.

Command Line Options

The basic options for the first run, i.e. to create a build folder and apply some settings are:

-S path/to/the/build/folder

(optional, if not set the current working directory is used)

-B path/to/the/build/directory

where the build files will be written


Set a CMake variable, e.g. cmake -DCMAKE_BUILD_TYPE=Release.

-G "Generator"

See Generators

cmake -S . -B build -DLSL_UNITTESTS=1 -G Ninja.

Common Variables

Some often used CMake variables:


On the first run, a CMake Generator can be specified via the -G option to set the native build system. The defaults are Makefiles on Unix and a Visual Studio version on Windows.

Example: cmake -G "Visual Studio 16 2019"

Building a project

Once a build folder is populated successfully, the binaries can be built either with the native build system (e.g. ninja install, msbuild ) or you can let CMake figure out which build system is used and how to run it via cmake --build path/to/build/folder --config Release -j --target install.

See Build a Project.


A target is either a binary to be built (e.g. the liblsl target builds lsl.dll on Windows, the LabRecorder target builds LabRecorder.exe and so on), a command to be run or an internal CMake target.

The most important CMake targets are:


cmake --build . --target clean removes all built binaries but keeps the CMake configuration.


CMake places built binary files as well as build sideproducts in a build folder that should be separate from the source directory. To copy only the needed files (and additional library files they depend on) to a folder you can share with colleagues or copy onto another PC, you need to ‘install’ them. This doesn’t mean ‘installing’ them in a traditional sense (i.e., with Windows installers or package managers on Linux / OS X, see package for that), but only copying them to a separate folder and fixing some hardcoded paths in the binaries.


CMake can create packages for installed targets, e.g. ZIP files, Windows installers or Debian / Ubuntu packages.

See the CPack manual for more information.