-
Notifications
You must be signed in to change notification settings - Fork 0
Building from Source
QuadClicker is a monorepo. Each platform lives in its own subdirectory with its own build toolchain.
QuadClicker/
├── windows/ — WPF / C# / .NET 10
├── macos/ — SwiftUI / Swift (Xcode project)
└── linux/ — Qt6 / C++ (CMake + Ninja)
Requirements:
- .NET 10 SDK
- Windows 10 22H2 or later
Build:
dotnet build windows/QuadClicker.csproj -c ReleaseRun tests:
dotnet test windows/Tests/QuadClicker.Tests.csprojThe test suite covers: ClickRateParserTests, ClickSessionTests, CliArgumentTests, AppSettingsMigrationTests, UpdateCheckerTests, UpdaterTests.
Publish self-contained single-file EXE (matches the release artifact):
dotnet publish windows/QuadClicker.csproj `
-c Release `
-r win-x64 `
--self-contained true `
-p:PublishSingleFile=true `
-p:IncludeNativeLibrariesForSelfExtract=true `
-p:EnableCompressionInSingleFile=true `
-o artifacts/windowsNo .NET runtime is required to run the resulting QuadClicker.exe.
Status: code-complete, unverified. The Swift source is present but has never been compiled. These instructions are sourced from the project files; they have not been exercised.
Requirements:
- macOS 13 Ventura or later
- Xcode 15 or later
- Apple Developer account (for distribution signing/notarization — see CODE_SIGNING.md)
Open in Xcode:
open macos/QuadClicker.xcodeprojCommand-line build:
xcodebuild -project macos/QuadClicker.xcodeproj \
-scheme QuadClicker \
-configuration Release \
-derivedDataPath artifacts/macosRun tests:
xcodebuild test -project macos/QuadClicker.xcodeproj \
-scheme QuadClickerTests \
-destination 'platform=macOS'
CGEventPostand global hotkeys require Accessibility permission. Grant it in System Settings → Privacy & Security → Accessibility before hotkeys will work.
Verified on: Ubuntu 24.04 LTS (Qt 6.4.2, GCC 13.3), including WSL2 with WSLg.
Requirements:
- Qt 6.2 or later
- CMake 3.20 or later
- GCC 11+ or Clang 13+
- libXtst, libXss, libX11 (X11 input injection and hotkeys)
- libdbus-1 (D-Bus for Wayland idle detection)
Install dependencies (Ubuntu/Debian):
sudo apt install build-essential cmake ninja-build pkg-config \
qt6-base-dev qt6-base-dev-tools qt6-tools-dev \
libqt6svg6-dev libxtst-dev libxss-dev libx11-dev \
libdbus-1-dev
libdbus-1-devis usually pulled in transitively byqt6-base-dev— CI builds succeed without it. Include it explicitly if your distro packages Qt6 without the D-Bus dependency.
Configure and build:
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release linux/
cmake --build buildRun tests:
ctest --test-dir build --output-on-failureThe test suite covers: ClickRateParserTests, ClickSessionTests, CliArgumentTests.
Install:
sudo cmake --install buildCLI smoke test:
./build/quadclicker --version
./build/quadclicker --rate 100ms --stop-after-clicks 5 --location 800,500WSL2 with WSLg (DISPLAY=:0, WAYLAND_DISPLAY=wayland-0) builds and runs correctly. The GUI renders through XWayland. Note that uinput (Wayland click injection path) is unavailable in WSL — exercise that path on a real Linux desktop session. See Hotkeys-and-Platform-Notes for more on WSLg behavior.
On a real Wayland session, click injection uses the uinput kernel interface. This requires /dev/uinput to exist and usually requires membership in the input group or a udev rule:
sudo usermod -aG input $USER
# Log out and back in for the group membership to take effect