Skip to content

Commit 370a467

Browse files
cmake: export/install crumbs package and add package config for find_package(crumbs)
1 parent a67a974 commit 370a467

3 files changed

Lines changed: 68 additions & 5 deletions

File tree

CMakeLists.txt

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,12 @@ add_library(crumbs STATIC ${CRUMBS_CORE_SOURCES})
4848
# Public headers live in src/ (for now)
4949
target_include_directories(crumbs
5050
PUBLIC
51-
${CMAKE_CURRENT_SOURCE_DIR}/src # crumbs.h, crumbs_*.h, crumbs_linux.h
52-
${CMAKE_CURRENT_SOURCE_DIR}/src/core
53-
${CMAKE_CURRENT_SOURCE_DIR}/src/crc
54-
${CMAKE_CURRENT_SOURCE_DIR}/src/crc/c99
55-
${CMAKE_CURRENT_SOURCE_DIR}/src/hal/linux
51+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
52+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/core>
53+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/crc>
54+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/crc/c99>
55+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/hal/linux>
56+
$<INSTALL_INTERFACE:include/crumbs>
5657
)
5758

5859
# ---------------------------------------------------------------------------
@@ -131,8 +132,11 @@ endif()
131132
# ---------------------------------------------------------------------------
132133

133134
# Install the static library
135+
# Install the static library and export targets so consumers can use find_package(crumbs)
134136
install(TARGETS crumbs
137+
EXPORT crumbsTargets
135138
ARCHIVE DESTINATION lib
139+
INCLUDES DESTINATION include/crumbs
136140
)
137141

138142
# Install public headers under include/crumbs/
@@ -146,3 +150,34 @@ install(
146150
${CMAKE_CURRENT_SOURCE_DIR}/src/crumbs_linux.h
147151
DESTINATION include/crumbs
148152
)
153+
154+
# ---------------------------------------------------------------------------
155+
# Export / Config packaging for CMake consumers
156+
# ---------------------------------------------------------------------------
157+
include(CMakePackageConfigHelpers)
158+
159+
set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/crumbs")
160+
161+
configure_package_config_file(
162+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/crumbsConfig.cmake.in"
163+
"${CMAKE_CURRENT_BINARY_DIR}/crumbsConfig.cmake"
164+
INSTALL_DESTINATION ${config_install_dir}
165+
)
166+
167+
write_basic_package_version_file(
168+
"${CMAKE_CURRENT_BINARY_DIR}/crumbsConfigVersion.cmake"
169+
VERSION ${PROJECT_VERSION}
170+
COMPATIBILITY SameMajorVersion
171+
)
172+
173+
install(EXPORT crumbsTargets
174+
FILE crumbsTargets.cmake
175+
NAMESPACE crumbs::
176+
DESTINATION ${config_install_dir}
177+
)
178+
179+
install(FILES
180+
"${CMAKE_CURRENT_BINARY_DIR}/crumbsConfig.cmake"
181+
"${CMAKE_CURRENT_BINARY_DIR}/crumbsConfigVersion.cmake"
182+
DESTINATION ${config_install_dir}
183+
)

cmake/crumbsConfig.cmake.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@PACKAGE_INIT@
2+
3+
# Load targets
4+
include("${CMAKE_CURRENT_LIST_DIR}/crumbsTargets.cmake")

docs/getting-started.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,30 @@
1111

1212
1. No external dependencies required.
1313

14+
### Native C (CMake) installation
15+
16+
You can build and install CRUMBS as a CMake library and then use `find_package(crumbs CONFIG)` from other projects.
17+
18+
In the source tree:
19+
20+
```bash
21+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
22+
cmake --build build --config Release --parallel
23+
cmake --install build --prefix /usr/local
24+
```
25+
26+
After installation you can use CRUMBS in other CMake projects with:
27+
28+
```cmake
29+
find_package(crumbs CONFIG REQUIRED)
30+
add_executable(myprog main.c)
31+
target_link_libraries(myprog PRIVATE crumbs::crumbs)
32+
```
33+
34+
Tips
35+
- For local development prefer the in-tree example usage (examples/native/controller) which will link the in-repo `crumbs` target via `add_subdirectory`.
36+
- When packaging for distribution ensure you install the exported cmake files (the top-level CMake provided export/install rules place crumbs targets under lib/cmake/crumbs) so `find_package(crumbs CONFIG)` can locate them via CMAKE_PREFIX_PATH or an installed system prefix.
37+
1438
## Basic Usage
1539

1640
### Controller (Arduino — C API)

0 commit comments

Comments
 (0)