Building
Dependencies
Required:
C++17 compiler
zlib (
zlib1g-dev/zlib-devel/ Homebrewzlib)
libzip and Eigen 3.4+ are fetched automatically by CMake when not found locally — no manual installation required.
Installing dependencies
The examples below include GoogleTest, which is only required when building the tests. Ninja is optional but recommended.
On Debian-based systems:
sudo apt-get install \
zlib1g-dev \
ninja-build \
libgtest-dev
On Mac OS, you can install the dependencies with brew:
brew install googletest ninja zlib
On Windows, you can install the dependencies through vcpkg and chocolatey:
choco install ninja -y
vcpkg install gtest zlib
Building to use in other projects
The recommended way to consume trx-cpp is via add_subdirectory or
FetchContent — this always works regardless of how libzip is resolved.
When using either approach, zlib is the only dependency you need
pre-installed; libzip and Eigen 3.4+ are fetched automatically if not
already present. Because Eigen is a public dependency of trx-cpp, your
code can use Eigen3::Eigen (and include Eigen headers) without a
separate find_package(Eigen3) call.
# CMakeLists.txt of your project
add_subdirectory(path/to/trx-cpp) # vendored copy
target_link_libraries(your_target PRIVATE trx-cpp::trx)
# — or via FetchContent —
include(FetchContent)
FetchContent_Declare(trx-cpp
GIT_REPOSITORY https://github.com/tee-ar-ex/trx-cpp.git
GIT_TAG main)
FetchContent_MakeAvailable(trx-cpp)
target_link_libraries(your_target PRIVATE trx-cpp::trx)
Installing trx-cpp (cmake --install) requires libzip to be available
as a system-installed package with CMake config support. When libzip is
auto-fetched by CMake (the default), the install step is automatically skipped
with a status message.
To enable installation, first install libzip through your package manager:
# Debian/Ubuntu
sudo apt-get install libzip-dev
# macOS
brew install libzip
# Windows (vcpkg)
vcpkg install libzip
Then configure and install trx-cpp normally:
cmake -S . -B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DTRX_BUILD_EXAMPLES=OFF \
-DTRX_ENABLE_INSTALL=ON \
-DCMAKE_INSTALL_PREFIX=/path/to/installation/directory
cmake --build build --config Release
cmake --install build
After installation, consume the package with:
find_package(trx-cpp CONFIG REQUIRED)
target_link_libraries(your_target PRIVATE trx-cpp::trx)
Key CMake options:
TRX_ENABLE_INSTALL: Install package config and targets (default ON for top-level builds)TRX_BUILD_EXAMPLES: Build example executables (default ON)TRX_BUILD_TESTS: Build tests (default OFF)TRX_BUILD_DOCS: Build docs with Doxygen/Sphinx (default OFF)TRX_ENABLE_CLANG_TIDY: Run clang-tidy during builds (default OFF)TRX_USE_CONAN: Use Conan setup incmake/ConanSetup.cmake(default OFF)TRX_FETCH_EIGEN: Fetch Eigen3 with FetchContent when not found locally (default ON)
Building for testing
cmake -S . -B build \
-G Ninja \
-DTRX_BUILD_TESTS=ON \
-DTRX_ENABLE_NIFTI=ON \
-DTRX_BUILD_EXAMPLES=OFF
cmake --build build
ctest --test-dir build --output-on-failure
Tests require GTest to be discoverable by CMake (e.g., via a system package or
GTest_DIR). If GTest is not found, tests will be skipped.
zlib must be discoverable by CMake (ZLIB::ZLIB), including for NIfTI I/O.
Building documentation:
Building the docs requires both Doxygen and sphinx-build on your PATH.
cmake -S . -B build \
-G Ninja \
-DTRX_BUILD_DOCS=ON
cmake --build build --target docs