mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 09:58:06 +00:00
内核 Registry 拆出 StopAndUnload: - 停止并从注册表移除插件但保留 config_<name> 表 - 不触发 onRemove 回调(那是删除专用语义) - RemovePlugin 改为追加清理配置表示清除,更新场景调 StopAndUnload pluginmgr: - installFromData/installFromURL/installFromPath 加 overwrite 参数 - 已存在+overwrite=true:StopAndUnload→备份旧目录→解压新包→失败回滚→ 返回 action=upgraded/downgraded/reinstalled+previous_version+config_kept - 已存在+overwrite=false:返回 error+hint(指向 overwrite 用法) - cmpVersion 点分版本号数字比较(非字典序) - 测试覆盖:首次安装→重装拒绝→升级保留配置→降级→失败回滚 skill_install 加 overwrite 参数: - 同名技能存在时先卸载旧实例+删除目录再安装新包 SDK PluginMgr 接口同步加 StopAndUnload(name string) error 工具链 plugindev 已重建到 /usr/local/bin(7/29→8/25 版本) QQ 插件诊断日志版(webhook recv 到达+isAtBot 失败日志)已打包并 通过 upgrade 接口热更新部署,配置保留验证通过。
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}") |