Compare commits
8
Commits
5d1ef621db
..
v1.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bac53a3e45 | ||
|
|
fa1f547e81 | ||
|
|
12e837c941 | ||
|
|
675d01f444 | ||
|
|
ccde2f73e9 | ||
|
|
3b44bd97f7 | ||
|
|
c5fea61784 | ||
|
|
07c4aa316a |
+45
-3
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(DataRouter C)
|
||||
project(DataRouter VERSION 1.1.0 LANGUAGES C)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
|
||||
@@ -12,6 +12,9 @@ option(DR_COMPILE_CHECK "Build compile-compatibility tests for each Cortex-M va
|
||||
set(DR_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/datarouter.c CACHE INTERNAL "")
|
||||
set(DR_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
|
||||
|
||||
# 预编译包使用者可用 find_package(DataRouter CONFIG) 从此路径加载
|
||||
set(DataRouter_CMAKE_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake CACHE INTERNAL "")
|
||||
|
||||
# ── 编译兼容性矩阵 (仅在 host 编译器和 ARM GCC 均可用时生效) ──
|
||||
|
||||
if(DR_COMPILE_CHECK)
|
||||
@@ -56,7 +59,9 @@ endif()
|
||||
# ── 常规库构建 ────────────────────────────────────────────────
|
||||
|
||||
add_library(DataRouter STATIC datarouter.c)
|
||||
target_include_directories(DataRouter PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_include_directories(DataRouter PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||
)
|
||||
|
||||
if(BUILD_EXAMPLES OR NOT DEFINED BUILD_EXAMPLES)
|
||||
add_executable(example example.c)
|
||||
@@ -73,10 +78,47 @@ endif()
|
||||
# ── 安装规则(用于打包发布) ─────────────────────────────
|
||||
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS DataRouter ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
set(DataRouter_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/DataRouter")
|
||||
|
||||
install(TARGETS DataRouter
|
||||
EXPORT DataRouterTargets
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/datarouter.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/datarouter_config.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/datarouter_config_template.h
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
)
|
||||
|
||||
# ── CMake 包配置文件(find_package(DataRouter) 用) ────
|
||||
|
||||
set(PACKAGE_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
set(PACKAGE_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
|
||||
|
||||
configure_package_config_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/DataRouterConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DataRouterConfig.cmake
|
||||
INSTALL_DESTINATION ${DataRouter_INSTALL_CMAKEDIR}
|
||||
PATH_VARS PACKAGE_INCLUDE_INSTALL_DIR PACKAGE_LIB_INSTALL_DIR
|
||||
)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DataRouterConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
|
||||
install(EXPORT DataRouterTargets
|
||||
FILE DataRouterTargets.cmake
|
||||
DESTINATION ${DataRouter_INSTALL_CMAKEDIR}
|
||||
)
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DataRouterConfig.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DataRouterConfigVersion.cmake
|
||||
DESTINATION ${DataRouter_INSTALL_CMAKEDIR}
|
||||
)
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
set_and_check(DataRouter_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
|
||||
set_and_check(DataRouter_LIBRARY_DIR "@PACKAGE_LIB_INSTALL_DIR@")
|
||||
get_filename_component(DataRouter_INCLUDE_DIR
|
||||
"${CMAKE_CURRENT_LIST_DIR}/../../../include" ABSOLUTE)
|
||||
get_filename_component(DataRouter_LIBRARY_DIR
|
||||
"${CMAKE_CURRENT_LIST_DIR}/../../../lib" ABSOLUTE)
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/DataRouterTargets.cmake" OPTIONAL)
|
||||
|
||||
# 无论 targets 文件是否加载,都覆盖 include 路径为正确值
|
||||
# (targets 文件中的 _IMPORT_PREFIX 在某些平台/工具链下可能计算异常)
|
||||
if(TARGET DataRouter)
|
||||
set_target_properties(DataRouter PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${DataRouter_INCLUDE_DIR}"
|
||||
)
|
||||
if(NOT TARGET DataRouter::DataRouter)
|
||||
add_library(DataRouter::DataRouter ALIAS DataRouter)
|
||||
endif()
|
||||
else()
|
||||
add_library(DataRouter::DataRouter STATIC IMPORTED)
|
||||
set_target_properties(DataRouter::DataRouter PROPERTIES
|
||||
IMPORTED_LOCATION "${DataRouter_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}DataRouter${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
|
||||
Reference in New Issue
Block a user