function(retrieve_files_custom path extension out_files) message(STATUS "Retrieving files in ${path}") set(EXTENSIONS "") foreach(ext ${extension}) list(APPEND EXTENSIONS "${path}/*.${ext}") endforeach () # 递归查找文件夹下的 .h .hpp. ini 文件保存到 HEAD_FILES file(GLOB_RECURSE FIND_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${EXTENSIONS}) # 将 HEDADER_FILES 和 SRC_FILES 保存到 ALL_FILES 变量 set(ALL_FILES ${FIND_FILES}) set(RESULT "") # 对 ALL_FILES 变量里面的所有文件分类(保留资源管理器的目录结构) foreach(fileItem ${ALL_FILES}) # Get the directory of the source file get_filename_component(PARENT_DIR "${fileItem}" DIRECTORY) # 用于检查平台的条件 if(PARENT_DIR STREQUAL "windows") if(WIN32) set(RESULT "${RESULT};${fileItem}") else() continue() endif() elseif(PARENT_DIR STREQUAL "linux") if(UNIX AND NOT APPLE) set(RESULT "${RESULT};${fileItem}") else() continue() endif() elseif(PARENT_DIR STREQUAL "mac") if(APPLE) set(RESULT "${RESULT};${fileItem}") else() continue() endif() else() # 如果文件夹名称不是平台,则始终包含 set(RESULT "${RESULT};${fileItem}") endif() # Remove common directory prefix to make the group string(REPLACE "${path}" "" GROUP "${PARENT_DIR}") # Make sure we are using windows slashes string(REPLACE "/" "\\" GROUP "${GROUP}") # Group into "Source Files" and "Header Files" set(GROUP "${GROUP}") source_group("${GROUP}" FILES "${fileItem}") endforeach() set(${out_files} ${RESULT} PARENT_SCOPE) endfunction() function(retrieve_files path out_files) set(temp_files "") retrieve_files_custom(${path} "h;hpp;ini;cpp;c;ixx" temp_files) set(${out_files} ${temp_files} PARENT_SCOPE) endfunction()