Why is the whole implementation in header files?
In more modern langauges, this is a solved problem and it's easy to use other people code. In C/C++, it's not. As a relavant example, try using FreeType in your C/C++ project, make sure your solution compiles on Linxu, and Mac, and Windows (and ideally other platforms)
find_package(Freetype REQUIRED)
target_link_libraries(myproject PRIVATE Freetype::Freetype)
pkg-config(1)