include(CMakeParseArguments)
# 生成插件动态库
# 使用方法:rv_add_plugin(target_name SOURCES <source files> DEPENDS <link libraries> PLUGIN_DEPENDS <depend plugins>)
function(rv_add_plugin TARGET)
set(OPTIONS)
set(ONE_ARGS)
set(MULTI_ARGS SOURCES DEPENDS PLUGIN_DEPENDS)
cmake_parse_arguments(ARG "${OPTIONS}" "${ONE_ARGS}" "${MULTI_ARGS}" ${ARGN})
set(PLUGIN_NAME ${PROJECT_NAME})
set(PLUGIN_VERSION ${PROJECT_VERSION})
rv_parse_plugin_depends(${ARG_PLUGIN_DEPENDS})
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.json.in
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.json
@ONLY)
add_library(${TARGET} SHARED
${ARG_SOURCES}
)
target_link_libraries(${TARGET} PRIVATE
${ARG_DEPENDS}
)
set_target_properties(${TARGET} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin"
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin"
)
endfunction()
function(rv_parse_plugin_depends)
# TODO: 应该传进来版本号,暂时写死用全局的版本号
set(VERSION ${TSP_VERSION_MAJ}.${TSP_VERSION_MIN}.${TSP_VERSION_PATCH})
set(LIST PARENT_SCOPE)
set(INDEX 0)
foreach(DEP ${ARGV})
if(${ARGC} STREQUAL "1")
set(LIST "{\"Name\" : \"${DEP}\",\"Version\" :\"${VERSION}\"}")
else()
math(EXPR INDEX "${INDEX} + 1")
if(${INDEX} STREQUAL ${ARGC})
set(LIST "${LIST} {\"Name\" : \"${DEP}\",\"Version\" :\"${VERSION}\"}")
else()
set(LIST "${LIST} {\"Name\" : \"${DEP}\",\"Version\" :\"${VERSION}\"}, ")
endif()
endif()
endforeach()
set(DEPENDENCY_LIST ${LIST} PARENT_SCOPE)
endfunction()作者:admin 创建时间:2025-02-10 11:17
最后编辑:admin 更新时间:2025-02-10 14:09
最后编辑:admin 更新时间:2025-02-10 14:09