mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-12-31 03:40:30 -07:00
Move many third-party components' source codes from the src folder to a new folder called deps_src. The goal is to make the code structure clearer and easier to navigate.
3.3 KiB
3.3 KiB
CMake Interfaces for deps_src Libraries
This document describes how to use the CMake interface libraries created for the subdirectories in deps_src/.
Available Libraries
1. semver (Static Library)
- Type: Static library
- Target:
semverorsemver::semver - Headers:
semver.h - Usage:
target_link_libraries(your_target PRIVATE semver)
# or
target_link_libraries(your_target PRIVATE semver::semver)
2. hints (Interface Library)
- Type: Interface library (header-only)
- Target:
hints - Utility:
hintsToPotexecutable - Usage:
target_link_libraries(your_target PRIVATE hints)
3. spline (Interface Library)
- Type: Interface library (header-only)
- Target:
splineorspline::spline - Headers:
spline.h - Usage:
target_link_libraries(your_target PRIVATE spline)
# or
target_link_libraries(your_target PRIVATE spline::spline)
4. stb_dxt (Interface Library)
- Type: Interface library (header-only)
- Target:
stb_dxtorstb_dxt::stb_dxt - Headers:
stb_dxt.h - Usage:
target_link_libraries(your_target PRIVATE stb_dxt)
# or
target_link_libraries(your_target PRIVATE stb_dxt::stb_dxt)
How to Use in Your Project
From within the OrcaSlicer src/ directory:
- In your CMakeLists.txt, simply link the library:
add_executable(my_app main.cpp)
target_link_libraries(my_app
PRIVATE
semver::semver # For version parsing
spline::spline # For spline interpolation
stb_dxt::stb_dxt # For DXT texture compression
hints # For hints functionality
)
- In your C++ code, include the headers:
// For semver
#include <semver.h>
// For spline
#include <spline.h>
// For stb_dxt
#include <stb_dxt.h>
// Use the libraries as documented in their respective headers
Benefits of This Approach
- Modern CMake: Uses target-based CMake with proper INTERFACE/PUBLIC/PRIVATE visibility
- Proper Include Paths: Automatically sets up include directories
- Namespace Aliases: Provides namespaced aliases (e.g.,
spline::spline) for clarity - Position Independent Code: Static libraries are built with
-fPICfor compatibility - Install Support: Libraries can be installed and used by external projects
- Build/Install Interface: Separates build-time and install-time include paths
Example Integration
Here's a complete example of using these libraries in a new component:
# In src/mycomponent/CMakeLists.txt
add_library(mycomponent STATIC
mycomponent.cpp
mycomponent.h
)
target_link_libraries(mycomponent
PUBLIC
semver::semver # Version handling is part of public API
PRIVATE
spline::spline # Used internally for interpolation
stb_dxt::stb_dxt # Used internally for texture compression
)
target_include_directories(mycomponent
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
Notes
- All header-only libraries use the INTERFACE library type, which means they don't produce any binaries
- The
semverlibrary produces a static library that will be linked into your target - The
hintsproject also produces ahintsToPotexecutable utility - All libraries require at least C++11 (some require C++17)