diff --git a/0_cmake_library/color_output.cmake b/0_cmake_library/color_output.cmake new file mode 100644 index 0000000..9c91af2 --- /dev/null +++ b/0_cmake_library/color_output.cmake @@ -0,0 +1,80 @@ +include_guard(GLOBAL) +#[[ +\033[1;31;40m +\033[0m +显示方式 +0 终端默认设置 +1 高亮显示 +4 使用下划线 +5 闪烁 +7 反白显示 +8 不可见 + +前景色 背景色 颜色 +--------------------------------------- +30 40 黑色 +31 41 红色 +32 42 绿色 +33 43 黃色 +34 44 蓝色 +35 45 紫红色 +36 46 青蓝色 +37 47 白色 +]] + +# 0x1b +string(ASCII 27 Esc) + +# Esc[0;31m +set(R "${Esc}[0;31m") #红色 +set(P "${Esc}[0;35m") #紫红色 +#Esc[0m +set(E "${Esc}[m") #结束颜色设置 + +set(B "${Esc}[1;34m") #蓝色高亮 + +set(_dbg_title "${Esc}[1;31;40m") +set(_h1 "${Esc}[4;34m") + +set(__target_name_ "${Esc}[1;33m") + + +set(Default "${Esc}[0m") # 0 - 终端默认设置 +set(Bold "${Esc}[1m") # 1 - 高亮显示(粗体) +set(Underline "${Esc}[4m") # 4 - 使用下划线 +set(Blink "${Esc}[5m") # 5 - 闪烁 +set(Reverse "${Esc}[7m") # 7 - 反白显示 +set(Invisible "${Esc}[8m") # 8 - 不可见 +#message("${Default}终端默认设置: 这是一段默认文本${Default}") +#message("${Bold}高亮显示: 这是一段高亮(粗体)文本${Default}") +#message("${Underline}使用下划线: 这是一段带下划线的文本${Default}") +#message("${Blink}闪烁: 这是一段闪烁的文本(如果终端支持)${Default}") +#message("${Reverse}反白显示: 这是一段反白显示的文本${Default}") +#message("${Invisible}不可见: 这段文本应该不可见(如果终端支持)${Default}") + + +# 形参命名规范 +# 1.如果前缀是下划线_,代表传参是变量名,否则是传值 +# 2.如果后缀是_list,代表这个变量是列表变量 +# 3 单返回值时,返回值放在最后一个参数,命名要么是 _ret 要么是 _ret_list + +# 函数命名规范 +# 自定义函数统一加前缀下划线_ +# 如果函数内部使用临时的列表变量,那么临时的列表变量要在函数开头置空 (为了防止外部定义了该列表变量,使用这个非空的变量导致错误) +# 如果函数特意要使用固定名称的外部变量,那么 + + +# 用于检测 防止穿错参数 +macro(__check_none_extr_params argc argn argv) + #__check_none_extr_params(${ARGC} "${ARGN}" "${ARGV}") + set(_err_msg "") + if (NOT "${argn}" STREQUAL "") + string(APPEND _err_msg "检查到多余参数!参数: ${argc} ${argv} 额外的参数: ${argn}") + endif () + if (NOT "${_err_msg}" STREQUAL "") + message(FATAL_ERROR "${_err_msg}") + endif () +endmacro() + + + diff --git a/0_cmake_library/main.cmake b/0_cmake_library/main.cmake index 31367ef..9056b18 100644 --- a/0_cmake_library/main.cmake +++ b/0_cmake_library/main.cmake @@ -1,5 +1,6 @@ include(${CMAKE_CURRENT_LIST_DIR}/register_libaray/rcl_register_ex.cmake) include(${CMAKE_CURRENT_LIST_DIR}/cmake/package_zip.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/color_output.cmake) macro(w_install files dir) install(FILES ${files} DESTINATION "${dir}") endmacro() diff --git a/0_cmake_library/register_libaray/rcl_register_ex.cmake b/0_cmake_library/register_libaray/rcl_register_ex.cmake index 6fef3f1..d15ea1a 100644 --- a/0_cmake_library/register_libaray/rcl_register_ex.cmake +++ b/0_cmake_library/register_libaray/rcl_register_ex.cmake @@ -13,13 +13,13 @@ endfunction() # 参数: namespace_name 是命名空间;output_variable 是接收目录的变量名。 function(__rcl_default_root_dir namespace_name output_variable) __rcl_namespace_storage_id("${namespace_name}" _namespace_storage_id) - if(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "" AND DEFINED G_Architecture_Name AND NOT "${G_Architecture_Name}" STREQUAL "") + if (DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "" AND DEFINED G_Architecture_Name AND NOT "${G_Architecture_Name}" STREQUAL "") set(_root_dir "${EXTERNAL_DIR}/${G_Architecture_Name}_${_namespace_storage_id}") - elseif(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "") + elseif (DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "") set(_root_dir "${EXTERNAL_DIR}/_rcl_external_${_namespace_storage_id}") - else() + else () set(_root_dir "${CMAKE_BINARY_DIR}/_rcl_external_${_namespace_storage_id}") - endif() + endif () set(${output_variable} "${_root_dir}" PARENT_SCOPE) endfunction() # INTERNAL: __rcl_split_library_name( ) @@ -35,9 +35,9 @@ endfunction() # 参数: namespace_name 是命名空间;可选 root_dir 是命名空间根目录。 function(rcl_init namespace_name) set(_root_dir "${ARGV1}") - if("${_root_dir}" STREQUAL "") + if ("${_root_dir}" STREQUAL "") __rcl_default_root_dir("${namespace_name}" _root_dir) - endif() + endif () library_create("${namespace_name}" "${_root_dir}") library_get_global("${namespace_name}" INSTALL_CACHE_ROOT _install_cache_root) list(APPEND CMAKE_PREFIX_PATH "${_install_cache_root}") @@ -107,10 +107,10 @@ endfunction() function(rcl_set_install_cache_root namespace_name install_cache_root) library_set_global("${namespace_name}" INSTALL_CACHE_ROOT "${install_cache_root}") library_get_global("${namespace_name}" DATA_EXPORT_DIR_EXPLICIT _data_export_dir_explicit) - if(NOT _data_export_dir_explicit) + if (NOT _data_export_dir_explicit) get_filename_component(_context_root "${install_cache_root}" DIRECTORY) library_set_global("${namespace_name}" DATA_EXPORT_DIR "${_context_root}/library_data") - endif() + endif () endfunction() # API: rcl_get_install_cache_root( ) # 作用: 读取安装缓存根目录。 @@ -451,16 +451,16 @@ endfunction() function(__rcl_add_unique_target_dependencies target_name) get_property(_existing_dependencies TARGET "${target_name}" PROPERTY MANUALLY_ADDED_DEPENDENCIES) set(_new_dependencies) - foreach(_dependency_target IN LISTS ARGN) + foreach (_dependency_target IN LISTS ARGN) list(FIND _existing_dependencies "${_dependency_target}" _existing_index) list(FIND _new_dependencies "${_dependency_target}" _new_index) - if(_existing_index EQUAL -1 AND _new_index EQUAL -1) + if (_existing_index EQUAL -1 AND _new_index EQUAL -1) list(APPEND _new_dependencies "${_dependency_target}") - endif() - endforeach() - if(_new_dependencies) + endif () + endforeach () + if (_new_dependencies) add_dependencies("${target_name}" ${_new_dependencies}) - endif() + endif () endfunction() # API GROUP: dependency target loading # API: rcl_add_dependency_action_targets_with_depth( [library_names...]) @@ -471,31 +471,31 @@ endfunction() function(rcl_add_dependency_action_targets_with_depth target_name dependency_depth) library_dependency_order_with_depth("${dependency_depth}" _dependency_order ${ARGN}) set(_dependency_action_targets) - foreach(_library_name IN LISTS _dependency_order) + foreach (_library_name IN LISTS _dependency_order) rcl_generate_registered_cmake_library("${_library_name}") __rcl_library_action_target_name("${_library_name}" auto _library_action_target) - if(NOT TARGET "${_library_action_target}") + if (NOT TARGET "${_library_action_target}") message(FATAL_ERROR "dependency action target was not generated: ${_library_action_target}") - endif() + endif () list(APPEND _dependency_action_targets "${_library_action_target}") - endforeach() - foreach(_library_name IN LISTS _dependency_order) + endforeach () + foreach (_library_name IN LISTS _dependency_order) __rcl_split_library_name("${_library_name}" _namespace_name _library_id) library_get("${_namespace_name}" "${_library_name}" RESOLVED_DEPENDENCIES _direct_dependencies) __rcl_library_action_target_name("${_library_name}" auto _library_action_target) set(_direct_dependency_targets) - foreach(_dependency_name IN LISTS _direct_dependencies) + foreach (_dependency_name IN LISTS _direct_dependencies) list(FIND _dependency_order "${_dependency_name}" _dependency_index) - if(NOT _dependency_index EQUAL -1) + if (NOT _dependency_index EQUAL -1) __rcl_library_action_target_name("${_dependency_name}" auto _dependency_action_target) list(APPEND _direct_dependency_targets "${_dependency_action_target}") - endif() - endforeach() + endif () + endforeach () __rcl_add_unique_target_dependencies("${_library_action_target}" ${_direct_dependency_targets}) - endforeach() - if(NOT TARGET "${target_name}") + endforeach () + if (NOT TARGET "${target_name}") add_custom_target("${target_name}") - endif() + endif () __rcl_add_unique_target_dependencies("${target_name}" ${_dependency_action_targets}) endfunction() # API: rcl_add_dependency_action_targets( [library_names...]) @@ -505,3 +505,30 @@ endfunction() function(rcl_add_dependency_action_targets target_name) rcl_add_dependency_action_targets_with_depth("${target_name}" 0 ${ARGN}) endfunction() + + +set_property(GLOBAL PROPERTY rcl_log_list "") +macro(rcl_log_append text) + set(rcl_log_location "${CMAKE_CURRENT_LIST_FILE}") + if (NOT "${CMAKE_CURRENT_FUNCTION}" STREQUAL "") + string(APPEND rcl_log_location " -> ${CMAKE_CURRENT_FUNCTION}()") + endif () + set_property(GLOBAL APPEND PROPERTY rcl_log_list "${rcl_log_location}|${text}") +endmacro() +function(rcl_log_print) + get_property(rcl_log_list GLOBAL PROPERTY rcl_log_list) + if ("${rcl_log_list}" STREQUAL "") + message("${B}全部加载完成!${E}") + return() + endif () + set(rcl_log_output "") + foreach (rcl_log IN LISTS rcl_log_list) + string(FIND "${rcl_log}" "|" split_pos) + string(SUBSTRING "${rcl_log}" 0 ${split_pos} location) + math(EXPR text_pos "${split_pos} + 1") + string(SUBSTRING "${rcl_log}" ${text_pos} -1 text) + string(APPEND rcl_log_output "${R}严重错误${E} ${R}${text}${E}\n") + string(APPEND rcl_log_output "${P}调用位置 ${E} file:///${location}\n") + endforeach () + message("${rcl_log_output}") +endfunction() \ No newline at end of file diff --git a/end.cmake b/end.cmake index 4270c91..6981634 100644 --- a/end.cmake +++ b/end.cmake @@ -17,5 +17,5 @@ include(${register_dir}/export.cmake) #rcl_generate_registered_cmake_libraries(osg_earth) #rcl_generate_registered_cmake_libraries(vsg_cesium) +rcl_log_print() -message("全部加载完成!") diff --git a/start.cmake b/start.cmake index 2cfa723..032abd0 100644 --- a/start.cmake +++ b/start.cmake @@ -2,6 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/main.cmake) _load_cmake_library() rcl_init(global) rcl_set_root_dir(global "${EXTERNAL_DIR}/${G_Architecture_Name}_global") + include(${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/register/export.cmake) #set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(ENABLE_BUILD_TIMER ON CACHE BOOL "" FORCE) @@ -25,4 +26,3 @@ include(${dqi}/Cppcheck/export.cmake) # 静态代码分析工具:检测 C include(${dqi}/lizard/export.cmake) # 代码复杂度分析工具:统计圈复杂度、函数规模等指标 include(${dqi}/cloc_tokei/export.cmake) # 代码统计工具:统计代码行数、语言组成等信息 include(${dqi}/CodeMetrics/export.cmake) # 软件度量工具:分析代码质量指标 -