cmake_minimum_required(VERSION 3.5) project(arona_core) function(retrieve_files path out_files) message(STATUS "Retrieving files in ${path}") # 递归查找文件夹下的 .h .hpp. ini 文件保存到 HEAD_FILES file(GLOB_RECURSE HEAD_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${path}/*.h ${path}/*.hpp ${path}/*.ini) # 递归查找文件夹下的 *.cpp *.c 文件保存到 SRC_FILES file(GLOB_RECURSE SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${path}/*.cpp ${path}*.c ${path}*.ixx) # 将 HEDADER_FILES 和 SRC_FILES 保存到 ALL_FILES 变量 set(ALL_FILES ${HEAD_FILES} ${SRC_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() # setup rtaudio if (WIN32) set(RTAUDIO_API_ASIO ON CACHE BOOL "" FORCE) set(RTAUDIO_API_WASAPI ON CACHE BOOL "" FORCE) set(RTAUDIO_API_DS OFF CACHE BOOL "" FORCE) elseif(APPLE) set(RTAUDIO_API_CORE ON CACHE BOOL "" FORCE) endif() # setup spdlog set(SPDLOG_BUILD_SHARED ON CACHE BOOL "" FORCE) set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE) set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "" FORCE) set(SPDLOG_FMT_EXTERNAL OFF CACHE BOOL "" FORCE) set(SPDLOG_FMT_EXTERNAL_HO OFF CACHE BOOL "" FORCE) set(SPDLOG_WCHAR_SUPPORT ON CACHE BOOL "" FORCE) set(SPDLOG_ENABLE_PCH ON CACHE BOOL "" FORCE) set(SPDLOG_USE_STD_FORMAT OFF CACHE BOOL "" FORCE) if (MSVC) link_directories(${CMAKE_BINARY_DIR}/bin/$) endif () # setup taskflow set(TF_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(TF_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(core) add_subdirectory(third_party/rtaudio) add_subdirectory(third_party/spdlog) add_subdirectory(third_party/mempool) add_subdirectory(third_party/taskflow)