Installation
Requirements
Requirement |
Minimum |
Notes |
|---|---|---|
CMake |
3.25 |
Modern target and install rules |
Compiler |
MSVC 19.4, Clang 17, GCC 13 |
C++23 is a hard requirement |
Git submodules |
pinned revisions |
DataFrame, ImGui and ImPlot sources |
Python |
none |
Only tooling, benchmarks and documentation use it |
The core library needs no Python, Doxygen or Sphinx at build time. Those tools are only needed to build this documentation site or run the benchmark harness.
Build from a checkout
git clone https://github.com/cloudQuant/fincore_cpp.git
cd fincore_cpp
git submodule update --init --recursive
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
ctest --test-dir build --output-on-failure
The suite is 1092 cases and takes under a minute on a desktop machine. If the
configure step reports a missing CMakeLists.txt, the submodules were not
initialised.
Build options
Option |
Default |
Effect |
|---|---|---|
|
|
Builds the test targets; turn off for a consumer build |
|
|
AddressSanitizer on fincore targets |
|
|
UndefinedBehaviorSanitizer on fincore targets |
|
|
Builds the ImPlot adapter; needs GUI dependencies |
|
|
Builds the demo; requires |
|
empty |
Uses a caller-provided DataFrame checkout instead of the submodule |
A sanitizer build is a separate configuration; do not mix it into a release tree:
cmake -S . -B build-asan -DCMAKE_BUILD_TYPE=RelWithDebInfo -DFINCORE_ENABLE_ASAN=ON
cmake --build build-asan --parallel
ctest --test-dir build-asan --output-on-failure
Install and consume
cmake --install build --prefix /path/to/prefix
That writes the headers under <prefix>/include/fincore, the library under
<prefix>/lib (or bin on Windows) and the CMake package under
<prefix>/lib/cmake/fincore, with fincoreConfig.cmake,
fincoreConfigVersion.cmake (same-major compatibility) and the exported targets.
find_package(fincore CONFIG REQUIRED COMPONENTS fincore)
target_link_libraries(my_target PRIVATE fincore::fincore)
The installed package calls find_dependency(DataFrame CONFIG REQUIRED), so the
consumer environment must also be able to find the DataFrame package that the
library was built against. Point CMAKE_PREFIX_PATH at both prefixes if they are
not installed side by side.
The optional ImPlot component is exported separately and only exists when the
library was built with FINCORE_BUILD_IMPLOT=ON:
find_package(fincore CONFIG REQUIRED COMPONENTS fincore implot)
Verify the install
#include <fincore/metrics/basic.hpp>
#include <cstdio>
int main() {
std::printf("%.0f\n",
fincore::annualization_factor(fincore::frequency::daily));
return 0;
}
Compile and run it against the installed prefix. If it links, the headers, the
library and the exported target line up; if it fails at configure time, the
fincore_DIR or the DataFrame dependency is the thing to inspect.
Platform notes
Windows. Run CMake from a Visual Studio developer shell so
cl.exeis onPATH. Multi-config generators place binaries underRelease/; pass--config Releasetocmake --buildandctest -C Release.macOS and Linux. The pinned submodules build with the system compiler; no extra packages are required for the core library.
CI. Windows and macOS are exercised on every push; the GCC 13
ubuntu-latestjob has a known constexpr-limit failure recorded in the iteration notes.
Documentation build
The site is one Sphinx project built twice, once per language:
python -m venv .venv-docs
.venv-docs/bin/pip install -r docs/requirements-docs.txt
cd docs/site
doxygen Doxyfile
python tools/normalize_doxygen_xml.py ../_build/doxygen/xml
sphinx-build -b html -W -n --keep-going . ../_build/html/en
FINCORE_DOCS_LANGUAGE=zh_CN sphinx-build -b html -W -n --keep-going . ../_build/html/zh_CN
cd ../..
python docs/site/tools/check_built_site.py
The checker exits non-zero on a broken internal link, a machine path in the built
pages, or an untranslated/fuzzy catalog entry. docs/site/README.md records the
maintenance rules, including why a heading must not start with a number.