cgltf
cgltf copied to clipboard
Provide an installable shared library
I understand that for some people a single-header "library" is easier to use, but for some use-cases a proper shared library would be better. Would this be something you'd like to consider?
I think it would basically boil down to a simple .c
file with CGLTF_IMPLEMENTATION
defined compiled to a shared library.
I'm willing to contribute and maintain the shared library, if that helps.
Like you're saying, that is something that is pretty easy to do. It mostly comes done to maintaining the build configurations for the different target platforms. What would your approach to that be?
My approach would be to add a very basic Meson build file that can optionally be used by downstream projects (as a subproject) and distributions to use cgltf without having to copy-paste header files around.
The Meson file could look like this: https://git.sr.ht/~emersion/cgltf/tree/master/meson.build
(If you don't like Meson, could use something else.)
Here is a simple CMakeLists I've written for conan package manager (with few modifications: https://github.com/conan-io/conan-center-index/pull/4449).
It assumes that cgltf.c
and cgltf_write.c
are available in the same directory (with proper definition and inclusion of respective headers).
Handles static/shared libs (through BUILD_SHARED_LIBS
global variable: https://cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html), and allows shared with Visual Studio.
cmake_minimum_required(VERSION 3.4)
project(cgltf C)
add_library(${PROJECT_NAME} cgltf.c cgltf_write.c)
set_target_properties(${PROJECT_NAME}
PROPERTIES
C_STANDARD 99
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
include(GNUInstallDirs)
install(
TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(FILES cgltf.h cgltf_write.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
With few more lines, it could install CMake config file with imported targets, and create a pkgconfig file.
@jkuhlmann, what do you think?
i would argue a simple bash script and batch script for windows would be the best option for a project this simple, this way no one needs to install any 3rd party tools just to get a header file in their /usr/include lol