#设置实体名称 ${MODULE_NAME},和实体前缀定义 ${MODULE_PREFIX} macro(define_moudle _module_name) set(MODULE_NAME "mod_${_module_name}") string(TOUPPER "MOD_${MODULE_NAME}" MODULE_PREFIX) endmacro(define_moudle) #macro(add_module _module_prefix _module_name) #endmacro(add_module) #对于 Windows 设置实体的版本信息 #定义共享库输出 macro(add_module_libraries _module_prefix _module_name _module_version) string(STRIP ${_module_version} RAW_VERSION_STRING) set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)") string(REGEX REPLACE "${VERSION_REGEX}" "\\1" MOD_VERSION_MAJOR "${RAW_VERSION_STRING}") string(REGEX REPLACE "${VERSION_REGEX}" "\\2" MOD_VERSION_MINOR "${RAW_VERSION_STRING}") string(REGEX REPLACE "${VERSION_REGEX}" "\\3" MOD_VERSION_REVISION "${RAW_VERSION_STRING}") string(REGEX REPLACE "${VERSION_REGEX}" "\\4" MOD_VERSION_SUFFIX "${RAW_VERSION_STRING}") set(MOD_VERSION "${MOD_VERSION_MAJOR}.${MOD_VERSION_MINOR}.${MOD_VERSION_REVISION}") set(MOD_API_VERSION "${MOD_VERSION_MAJOR}") if (MOD_VERSION_SUFFIX) set(MOD_VERSION_FULL "${MOD_VERSION}-${MOD_VERSION_SUFFIX}") else() set(MOD_VERSION_FULL "${MOD_VERSION}") endif() if(WIN32) set (RC_VERSION_MAJOR ${RVC_VERSION_MAJOR}) set (RC_VERSION_MINOR ${MOD_VERSION_MAJOR}) set (RC_VERSION_BUILD ${MOD_VERSION_MINOR}) set (RC_VERSION_PATCH ${MOD_VERSION_REVISION}) set(RC_VERSION_DESCRIPTION "${CMAKE_SHARED_LIBRARY_PREFIX}${_module_name}_${MOD_VERSION_FULL}${CMAKE_SHARED_LIBRARY_SUFFIX}") configure_file( ${CMAKE_SOURCE_DIR}/Version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY) set(${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc) endif(WIN32) add_library(${_module_name} SHARED ${${_module_prefix}_SRCS}) # 设置工程输出路径 if(SIMULATE_DEV_AND_TEST_TEMP) set_target_properties(${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod") endif(SIMULATE_DEV_AND_TEST_TEMP) endmacro(add_module_libraries) # 设置实体的安装拷贝路径 # 对于 Windows 设置实体项目工程在解决方案的节点 macro(deploy_module _module_prefix _module_name) install(TARGETS ${_module_name} RUNTIME DESTINATION "${RVC_MODULE_PATH}" ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT modules) set_property(TARGET ${_module_name} PROPERTY FOLDER "module/") endmacro(deploy_module) #set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client) #set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) #set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} msimg32) #target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) set(MODULE_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # 遍历实体 # file(GLOB module_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/*") # set(module_list "") # foreach(module_dir ${module_dirs}) # if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_dir}) # list(APPEND module_list ${module_dir}) # endif() #endforeach() #foreach(module ${module_list}) # message(STATUS "add module ${module}...") # add_subdirectory(${module}) #endforeach() file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt") foreach(dir ${all_valid_subdirs}) if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt") string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir}) message(STATUS "add module ${dir_trimmed}") add_subdirectory(${dir_trimmed}) endif() endforeach(dir)