-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Building
Warning
WIP: These instructions are a work in progress.
Deskflow is free and open source software, and anyone is welcome to build it, run it, tinker with it, fork it, redistribute it as part of their own app, etc.
Before we can begin building, we need to set up the development environment.
Legacy instructions: Building (legacy)
Getting started on Windows requires you first have the following tools installed and in your PATH
-
Visual Studio Community or Visual Studio 2022
- Install at least the following VS components:
- MSVC v143 - VS 2022 C++ x64 / x86 build tools
- A Windows SDK for example I am using
Windows 10 SDK (10.0.18362.0)
- Install at least the following VS components:
- cmake - CMake v3.24 or higher is needed
- ninja
- git
-
vcpkg - Recommended for dependency management:
- Clone
vcpkg
toC:\vcpkg
(names can get long and Windows has a path limit) - After you have
vcpkg.exe
inC:\vcpkg
be sure to runvcpkg integrate install
- Note the "toolchain" it tells you to use for CMake; we will need this to configure.
- Be sure to add
%VCPKG_ROOT%
to yourPATH
env var.
- Clone
Getting started on macOS you will need to have the following tools
- XCode - App Store - You must open it after installing and install the SDK for the version of macOS you have.
- Homebrew
- Git
- CMake 3.24
- Qt 6
Tip: Once you have installed brew
, run this command
brew install git cmake qt
You should have at lest the basic items to build C++ code:
- gcc or clang
- cmake 3.24+
- git
- ninja build tool (recommended)
Use your package manager to install these.
Deskflow requires the following to build:
- CMake 3.24+
- Qt 6.5+
- OpenSSL 3.0
- TOML++**
- CLI11**
- Google Test**
- libportal 0.8+ (Linux only)
- libei 1.3+ (Linux only)
- WinToast (Windows only)
** These dependencies will be downloaded automatically at build time if they are not found on your system, Google Test is only needed to build tests.
If you have installed vcpkg
when using either Qt Creator or Visual Studio Code it should automatically detect your vcpkg info. If it does not you will need to set your CMAKE_TOOLCHAIN_FILE
. Once vcpkg
has been setup it will download and build the needed dependencies when you run the configuration command. It will take a while to build things the first time, which is normal.
The following items will be installed by vcpkg: qt
, openssl
, gtest
, and wintoast
.
Both tomlplusplus
and cli11
will be embedded by CMake.
- Qt 6.5+
- You should not use the
brew
version of Qt if you plan to distribute the build (it targets only the current system). - If you want to distribute your builds you need to get Qt from the Qt Online Installer - openssl 3.0+
- tomlplusplus (optional)
- cli11 (optional)
- googletest (optional)
If your disto has dev
or devel
package be sure to install those.
- libei 1.3
- libportal 0.8
- qt 6.5+
- tomlplusplus (optional)
- cli11(optional)
- google test (optional)
Debian/Ubuntu:
apt install cmake build-essential ninja-build \
xorg-dev libx11-dev libxtst-dev libssl-dev \
libglib2.0-dev libgdk-pixbuf-2.0-dev libnotify-dev \
libxkbfile-dev qt6-base-dev qt6-tools-dev \
libgtk-3-dev libgtest-dev libgmock-dev libpugixml-dev \
libei-dev libportal-dev libtomlplusplus-dev libcli11-dev
Fedora:
dnf install cmake make ninja-build gcc-c++ rpm-build \
openssl-devel glib2-devel gdk-pixbuf2-devel \
libXtst-devel libnotify-devel libxkbfile-devel \
qt6-qtbase-devel qt6-qttools-devel gtk3-devel \
gtest-devel gmock-devel pugixml-devel libei-devel \
libportal-devel tomlplusplus-devel cli11-devel
RHEL
dnf install epel-release
dnf config-manager --set-enabled crb
dnf install cmake make ninja-build gcc-c++ rpm-build \
openssl-devel glib2-devel gdk-pixbuf2-devel \
libXtst-devel libnotify-devel libxkbfile-devel \
qt6-qtbase-devel qt6-qttools-devel gtk3-devel \
gtest-devel gmock-devel pugixml-devel libei-devel \
libportal-devel tomlplusplus-devel cli11-devel
SUSE/openSUSE:
zypper install cmake make ninja gcc-c++ rpm-build libopenssl-devel \
glib2-devel gdk-pixbuf-devel libXtst-devel libnotify-devel \
libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \
googletest-devel googlemock-devel pugixml-devel libei-devel \
libportal-devel tomlplusplus-devel cli11-devel
Arch Linux:
pacman -S base-devel cmake ninja gcc openssl \
glib2 gdk-pixbuf2 libxtst libnotify \
libxkbfile gtest pugixml libei libportal \
qt6-base qt6-tools gtk3 tomlplusplus cli11
CMake options:
Option | Description | Default Value | Additional requirements |
---|---|---|---|
BUILD_GUI | Build GUI | ON | Qt |
BUILD_DOCS | Build User Documentation | ON | Doxygen |
BUILD_INSTALLER | Build installers/packages | ON | |
BUILD_TESTS | Build unit tests and integration tests | ON | gtest |
BUILD_UNIFIED | Build unified binary (client+server) | OFF | |
ENABLE_COVERAGE | Enable test coverage | OFF | gcov |
To configure you use CMake.
Tip
You could create a CMakeUserPresets.json
file.
Configure command example:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
Build command example:
cmake --build build -j8