4.0 KiB
#documentation #build #cmake
Build Locally Guide
This guide explains how to build Card Collection Manager 3 on Windows and Linux, how dependencies are resolved, and how to run tests locally. For architecture orientation, see Intro For New Developers.
Quick Setup: run CMake configure, build, launch ccm3, then run ctest from the same build directory.
Build Model
The project uses CMake and builds one desktop executable:
- executable target:
ccm(output binary:ccm3/ccm3.exe) - language standard: C++20
- layered targets:
ccm_core(logic),ccm_ui_wx(wx UI),ccm(composition root)
Dependency Model
Dependencies are managed with CMake FetchContent in cmake/Dependencies.cmake.
Pinned versions:
nlohmann/jsonv3.11.3libcpr/cpr1.10.5wxWidgetsv3.2.5doctestv2.4.11(only when tests are enabled)
On first configure, CMake downloads sources. On first full build, heavy dependencies (especially wxWidgets and curl) build locally. Later builds reuse cached dependencies under build/_deps.
Use System wxWidgets
By default, the build fetches wxWidgets. For faster local iteration with an installed wxWidgets, set -DCCM_USE_SYSTEM_WX=ON.
Prerequisites
Windows
Recommended: Clang + Ninja
- LLVM/Clang 14+ on
PATH - CMake 3.22+
- Ninja on
PATH
Verified fallback: MSYS2 UCRT64 + MinGW-w64 GCC
- MSYS2 UCRT64 toolchain (
gcc,cmake,makeorninja) - CMake 3.22+
MSVC is intentionally not supported.
Linux
- CMake 3.22+
- Clang or GCC with C++20 support
- Ninja recommended
- required system packages when using system wxWidgets (for example GTK/wx dev packages)
Build Commands
Run from repository root.
Windows (Clang + Ninja)
cmake -S . -B build -G Ninja
cmake --build build --parallel
.\build\bin\ccm3.exe
Windows (MinGW Makefiles)
cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel 4
.\build\bin\ccm3.exe
Linux (Ninja)
cmake -S . -B build -G Ninja
cmake --build build --parallel
./build/bin/ccm3
Build Options
CCM_USE_SYSTEM_WX(defaultOFF): use installed wxWidgets instead of fetched wxWidgets.CCM_BUILD_TESTS(defaultON): buildccm_core_tests.CMAKE_BUILD_TYPE(commonlyRelease): standard CMake build type.CCM_APP_VERSION(default${PROJECT_VERSION} (localbuild)): app version string shown in About dialog.
Example for faster local iteration:
cmake -S . -B build -DCCM_USE_SYSTEM_WX=ON -DCCM_BUILD_TESTS=OFF
cmake --build build
Run Tests Locally
From repository root:
cmake -S . -B build -DCCM_BUILD_TESTS=ON
cmake --build build --target ccm_core_tests
ctest --test-dir build --output-on-failure
Automated tests primarily cover core/ and infrastructure adapters. UI testing is currently manual.
Runtime Notes
Windows Runtime DLLs
cpr builds as shared, so build/bin contains runtime DLLs (for example libcpr.dll, libcurl.dll, libzlib.dll) next to ccm3.exe.
For MinGW/MSYS2 builds, the ccm POST_BUILD step also copies libstdc++-6.dll, libgcc_s_seh-1.dll, and libwinpthread-1.dll from the compiler’s bin/ next to ccm3.exe. That keeps Explorer / IDE launches on the same UCRT runtime used to build (avoids “Entry Point Not Found” / __emutls_v._ZSt11__once_call against libcpr.dll when a different libstdc++ is on PATH).
Troubleshooting
- First build is slow: expected on cold dependency fetch/build, especially wxWidgets and curl.
Permission deniedwhile linkingccm3.exe: the app is still running; close it and rebuild.- Generator mismatch: reuse the same generator for a build directory or create a new build directory.
- Windows CI/local shell mismatch: in CI jobs using
shell: msys2 {0}, ensure MSYS2 setup runs before shell commands.