-
Notifications
You must be signed in to change notification settings - Fork 132
2. Installation instructions
Quantum++ is a header-only library that uses CMake as its build/install system. Quantum++ is platform-independent, supporting UNIX (including macOS) and UNIX-like operating systems (e.g., Linux), as well as Windows.
-
Python 3 for running the
pyqpp
Python 3 wrapper -
MATLAB compiler shared libraries
and include header files, in case you want to enable interoperability with
MATLAB. If enabled, allows applications build with Quantum++ to save/load
Quantum++ matrices and vectors to/from MATLAB. The locations of the MATLAB
compiler shared libraries and header files are platform-specific, e.g., under
Linux, they may be located under
/usr/local/MATLAB/R2021a/bin/glnxa64
and/usr/local/MATLAB/R2021a/extern/include
, respectively. On your platform the locations may of course differ.
First configure the system via CMake to use an out-of-source build directory
(e.g., ./build
) by executing (in a terminal/console/command prompt) under the
project's root directory
cmake -B build
To build the examples execute
cmake --build build --target=examples --parallel 8
To build the unit tests, execute
cmake --build build/unit_tests --target=unit_tests --parallel 8
The commands above builds all examples as executables in ./build
, followed by
building the unit tests executable in ./build/unit_tests/unit_tests
. The
--parallel 8
instructs CMake to build in parallel using 8 threads, modify
accordingly.
Tu run the unit tests, execute
ctest --test-dir build
To build only a specific target, execute, e.g.,
cmake --build build --target=bb84
The command above builds only the example
examples/bb84
and outputs the executable ./build/bb84[.exe]
.
Note that all CMake flags below that start with QPP_
and QASMTOOLS_
propagate to subprojects that use Quantum++ in
their corresponding CMakeLists.txt
via findpackage(qpp ...)
.
Optional argument | Value | Description |
---|---|---|
CMAKE_INSTALL_PREFIX |
/path/to/install |
Installs Quantum++ header files in a non-standard location (e.g., due to lack of admin. rights) |
QPP_MATLAB |
ON/OFF [OFF by default] |
Enables (if available)/disables interoperability with MATLAB, allowing to detect MATLAB installation automatically. If enabled, allows applications to save/load Quantum++ matrices and vectors to/from MATLAB. |
QPP_OPENMP |
ON/OFF [ON by default] |
Enables (if available)/disables OpenMP multi-processing library |
QASMTOOLS_QASM2_SPECS |
ON/OFF [OFF by default] |
Enables/disables using the OpenQASM 2.0 standard instead of Qiskit specifications; see DISCREPANCIES.md
|
QPP_BIGINT |
default , etc. [default by default] |
Signed big integer type (qpp::bigint ) |
QPP_FP |
default , etc. [default by default] |
Floating-point type (qpp::realT ) |
QPP_IDX |
default , etc. [default by default] |
Integer index type (qpp::idx ) |
SANITIZE |
ON/OFF [OFF by default] |
Enable code sanitizing (only for gcc/clang) |
To install Quantum++ (after Configuring the system), execute in a terminal/console (UNIX/UNIX-like systems)
sudo cmake --build build --target install
or in an Administrator Command Prompt (Windows)
cmake --build build --target install
The commands above install Quantum++ in /usr/local/include/qpp
on
UNIX/UNIX-like platforms, and in C:\Program Files (x86)\qpp
on Windows
platforms.
To uninstall, execute in a terminal/console (UNIX/UNIX-like systems)
sudo cmake --build build --target uninstall
or in an Administrator Command Prompt (Windows)
cmake --build build --target uninstall
We are proud to be part of the FreeBSD operating system as an official package. If you are running FreeBSD, you can install Quantum++ with
sudo pkg install quantum++
and uninstall it with
sudo pkg remove quantum++
If you are running macOS or Linux, you can install Quantum++ via Homebrew with
brew install quantum++
and uninstall it with
brew uninstall quantum++
Below is a minimal CMakeLists.txt
of a standalone application that uses
Quantum++. For simplicity, we assume that the whole application is located in a
single file src/main.cpp
, and the CMakeLists.txt
is located in the project's
root directory.
cmake_minimum_required(VERSION 3.15)
project(standalone)
set(CMAKE_CXX_STANDARD 17)
# If the Quantum++ installation path was non-standard, i.e., specified by
#
# cmake -B build -DCMAKE_INSTALL_PREFIX=/path/to/installed/qpp
#
# then uncomment the following line and replace the installation path with yours
# set(CMAKE_PREFIX_PATH "/path/to/installed/qpp")
find_package(qpp REQUIRED)
add_executable(standalone src/main.cpp)
target_link_libraries(standalone PUBLIC ${QPP_LINK_DEPS} libqpp)
Do not forget to ALWAYS add ${QPP_LINK_DEPS}
(verbatim)
to target_link_libraries()
! (last line of the
CMakeLists.txt
file above).
Configure the application in an out-of-source directory by executing
cmake -B build
followed by building the application with
cmake --build build
The commands above builds the standalone
executable inside the build
directory.
Quantum++ is a header-only library. Hence, you can technically build an application that uses Quantum++ without using a building system, by simply using the compiler and specifying the location to all required dependencies, like below (assumes UNIX/UNIX-like, adapt accordingly for Windows)
g++ -pedantic -std=c++17 -Wall -Wextra -Weffc++ -fopenmp \
-O3 -DNDEBUG -DEIGEN_NO_DEBUG \
-isystem $HOME/eigen3 -I $HOME/qpp/include -I $HOME/qpp/qasmtools/include \
src/main.cpp -o my_qpp_app
If you intend to go via this route, we assume that you are familiar with how compilers work, so we won't add any more explanations to what the line above does.
- We highly recommend installing clang via Homebrew, since the native AppleClang does not offer OpenMP support.
- In case you get any compiler or linker errors when OpenMP is enabled, you
need to install the
libomp
package, e.g., execute
brew install libomp
If building under Windows
with MATLAB support, please add
the location of libmx.dll
and libmat.dll
(the .dll
and not the .lib
files) to your PATH
environment variable. In our case they are located under
C:\Program Files\MATLAB\R2021a\bin\win64
.
pyqpp is a Python 3
wrapper for Quantum++. pyqpp requires the same dependencies as Quantum++, and
can be installed using pip
pip install git+https://github.com/softwareQinc/qpp
For more details, please see pyqpp/README.md.
The Python3 wrapper
pyqpp
doesn't compile under SunOS/OpenIndiana due to errors in <cmath>
such as
no member named 'llround' in the global namespace; did you mean 'lround'?
Copyright (c) 2017 - 2025 softwareQ Inc. All rights reserved.