mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-20 00:48:12 +00:00
- meta: CORE_PLUGIN_RELOAD_ONE(48) / LIST_LOADED(49) / IS_DISABLED(50) - sdk: PluginMgrAPI 接口(ReloadOne/ListLoadedPlugins/IsPluginDisabled) + PluginSDK.SetPluginMgrAPI/PluginMgr() 访问器 - plugindev 模板: dispatchPluginMgr 桥接注入,走 C ABI 48/49/50
116 lines
3.2 KiB
CMake
116 lines
3.2 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
||
project(ha_remotedevice VERSION 0.1.0 LANGUAGES C)
|
||
|
||
# ============================================================
|
||
# ha_remotedevice — HomeAgent 远程设备接入 C SDK
|
||
# 零外部依赖,纯 C 实现,兼容嵌入式平台。
|
||
#
|
||
# 使用方式:
|
||
# add_subdirectory(path/to/ha_remotedevice)
|
||
# target_link_libraries(my_app ha_remotedevice)
|
||
# target_include_directories(my_app PRIVATE
|
||
# ${HA_REMOTEDEVICE_INCLUDE_DIR})
|
||
# ============================================================
|
||
|
||
# 选项: 构建为静态库或动态库
|
||
option(BUILD_SHARED_LIBS "Build ha_remotedevice as shared library" OFF)
|
||
|
||
# 选项: 禁用 malloc/free(用于裸机环境,用户需提供 alloc 回调)
|
||
option(HA_NO_ALLOC "Disable dynamic memory allocation" OFF)
|
||
|
||
# 选项: 日志级别
|
||
set(HA_LOG_LEVEL 2 CACHE STRING "Log level: 0=none, 1=error, 2=info, 3=debug")
|
||
|
||
# 源文件
|
||
set(HA_REMOTEDEVICE_SRC
|
||
src/ha_remotedevice.c
|
||
src/ha_json.c
|
||
src/ha_ws.c
|
||
)
|
||
|
||
# 头文件
|
||
set(HA_REMOTEDEVICE_INCLUDE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
)
|
||
|
||
# 编译选项
|
||
if(HA_NO_ALLOC)
|
||
add_definitions(-DHA_NO_ALLOC)
|
||
endif()
|
||
add_definitions(-DHA_LOG_LEVEL=${HA_LOG_LEVEL})
|
||
|
||
# 创建库
|
||
if(BUILD_SHARED_LIBS)
|
||
add_library(ha_remotedevice SHARED ${HA_REMOTEDEVICE_SRC})
|
||
if(WIN32)
|
||
# Windows 需要导出符号
|
||
set_target_properties(ha_remotedevice PROPERTIES
|
||
WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||
endif()
|
||
else()
|
||
add_library(ha_remotedevice STATIC ${HA_REMOTEDEVICE_SRC})
|
||
endif()
|
||
|
||
# 包含目录
|
||
target_include_directories(ha_remotedevice
|
||
PUBLIC ${HA_REMOTEDEVICE_INCLUDE}
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
)
|
||
|
||
# 不链接任何外部库
|
||
target_link_libraries(ha_remotedevice PRIVATE)
|
||
|
||
# 导出包含目录供外部项目使用
|
||
set(HA_REMOTEDEVICE_INCLUDE_DIR
|
||
${HA_REMOTEDEVICE_INCLUDE}
|
||
CACHE INTERNAL "ha_remotedevice include directories")
|
||
|
||
# 安装规则
|
||
install(TARGETS ha_remotedevice
|
||
EXPORT ha_remotedevice-targets
|
||
LIBRARY DESTINATION lib
|
||
ARCHIVE DESTINATION lib
|
||
RUNTIME DESTINATION bin
|
||
INCLUDES DESTINATION include
|
||
)
|
||
|
||
install(DIRECTORY include/
|
||
DESTINATION include
|
||
)
|
||
|
||
install(EXPORT ha_remotedevice-targets
|
||
DESTINATION lib/cmake/ha_remotedevice
|
||
NAMESPACE ha_remotedevice::
|
||
)
|
||
|
||
# ============================================================
|
||
# 测试(可选)
|
||
# ============================================================
|
||
option(BUILD_TESTS "Build ha_remotedevice tests" OFF)
|
||
|
||
if(BUILD_TESTS)
|
||
find_package(Threads REQUIRED)
|
||
|
||
add_executable(ha_remotedevice_test
|
||
test/test_ha_remotedevice.c
|
||
)
|
||
target_link_libraries(ha_remotedevice_test
|
||
PRIVATE ha_remotedevice Threads::Threads
|
||
)
|
||
target_include_directories(ha_remotedevice_test
|
||
PRIVATE ${HA_REMOTEDEVICE_INCLUDE_DIR}
|
||
)
|
||
|
||
# 添加测试
|
||
add_test(NAME ha_remotedevice_test
|
||
COMMAND ha_remotedevice_test
|
||
)
|
||
endif()
|
||
|
||
# ============================================================
|
||
# 编译信息
|
||
# ============================================================
|
||
message(STATUS "ha_remotedevice ${PROJECT_VERSION}")
|
||
message(STATUS " Build type: $<CONFIG>")
|
||
message(STATUS " Shared lib: ${BUILD_SHARED_LIBS}")
|
||
message(STATUS " No alloc: ${HA_NO_ALLOC}") |