From 3d5223caf456bead656151a2f12bb17b02fd279e Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Thu, 20 Aug 2026 09:28:48 +0800 Subject: [PATCH] refactor(tests): auto-discover reader sources and include dirs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use GLOB_RECURSE and auto-scan reader subdirectories instead of listing each module manually in tests/CMakeLists.txt. 将测试CMakeLists改为递归收集源文件和自动发现include路径, 新增子模块时无需再手动修改测试构建配置。 Log: 测试CMakeLists自动发现reader源文件和include路径 Influence: 新增reader子模块时测试构建自动适配,无需手动同步CMakeLists --- tests/CMakeLists.txt | 60 ++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 60bdb43f..892e928e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -75,49 +75,38 @@ endif() set(XPS_SUPPORT_ENABLED ${XPS_SUPPORT_RESOLVED}) # ====== 收集 reader 源文件 ====== -# 根目录源文件(排除 main.cpp) -file(GLOB READER_ROOT_SOURCES +# 递归收集 reader/ 下所有源文件,排除 main.cpp +# 新增子模块时无需修改此文件 +file(GLOB_RECURSE READER_ALL_SOURCES "${CMAKE_SOURCE_DIR}/reader/*.cpp" "${CMAKE_SOURCE_DIR}/reader/*.c" "${CMAKE_SOURCE_DIR}/reader/*.h" ) -list(REMOVE_ITEM READER_ROOT_SOURCES "${CMAKE_SOURCE_DIR}/reader/main.cpp") +list(REMOVE_ITEM READER_ALL_SOURCES "${CMAKE_SOURCE_DIR}/reader/main.cpp") -# 各子模块源文件 -file(GLOB_RECURSE APP_SOURCES "${CMAKE_SOURCE_DIR}/reader/app/*.cpp" "${CMAKE_SOURCE_DIR}/reader/app/*.h") -file(GLOB_RECURSE BROWSER_SOURCES "${CMAKE_SOURCE_DIR}/reader/browser/*.cpp" "${CMAKE_SOURCE_DIR}/reader/browser/*.h") -file(GLOB_RECURSE DOCUMENT_SOURCES "${CMAKE_SOURCE_DIR}/reader/document/*.cpp" "${CMAKE_SOURCE_DIR}/reader/document/*.h") -file(GLOB_RECURSE SIDEBAR_SOURCES "${CMAKE_SOURCE_DIR}/reader/sidebar/*.cpp" "${CMAKE_SOURCE_DIR}/reader/sidebar/*.h") -file(GLOB_RECURSE UIFRAME_SOURCES "${CMAKE_SOURCE_DIR}/reader/uiframe/*.cpp" "${CMAKE_SOURCE_DIR}/reader/uiframe/*.h") -file(GLOB_RECURSE WIDGET_SOURCES "${CMAKE_SOURCE_DIR}/reader/widgets/*.cpp" "${CMAKE_SOURCE_DIR}/reader/widgets/*.h") +# ====== 自动发现 reader 子目录作为 include 路径 ====== +file(GLOB READER_SUBDIRS LIST_DIRECTORIES true "${CMAKE_SOURCE_DIR}/reader/*") +foreach(_dir ${READER_SUBDIRS}) + if(IS_DIRECTORY "${_dir}") + list(APPEND READER_INCLUDE_DIRS "${_dir}") + endif() +endforeach() +list(APPEND READER_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/reader") # ====== 收集测试源文件 ====== -file(GLOB TEST_ROOT_SOURCES +file(GLOB_RECURSE TEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/*.h" ) -file(GLOB TEST_APP_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/app/*.cpp") -file(GLOB TEST_BROWSER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/browser/*.cpp") -file(GLOB TEST_DOCUMENT_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/document/*.cpp") -file(GLOB TEST_SIDEBAR_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/sidebar/*.cpp") -file(GLOB TEST_UIFRAME_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/uiframe/*.cpp") -file(GLOB TEST_WIDGET_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/widgets/*.cpp") +# 排除非测试辅助目录(如 at/、files/ 等资源目录) +list(FILTER TEST_SOURCES EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/at/") +list(FILTER TEST_SOURCES EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/files/") +list(FILTER TEST_SOURCES EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/include/") # ====== 合并所有源文件 ====== set(ALL_SOURCES - ${READER_ROOT_SOURCES} - ${APP_SOURCES} - ${BROWSER_SOURCES} - ${DOCUMENT_SOURCES} - ${SIDEBAR_SOURCES} - ${UIFRAME_SOURCES} - ${WIDGET_SOURCES} - ${TEST_ROOT_SOURCES} - ${TEST_APP_SOURCES} - ${TEST_BROWSER_SOURCES} - ${TEST_DOCUMENT_SOURCES} - ${TEST_SIDEBAR_SOURCES} - ${TEST_UIFRAME_SOURCES} - ${TEST_WIDGET_SOURCES} + ${READER_ALL_SOURCES} + ${TEST_SOURCES} ) # ====== 定义测试可执行文件 ====== @@ -130,14 +119,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES ) # ====== 包含目录 ====== +# READER_INCLUDE_DIRS 由上方自动发现,新增子模块时无需手动添加 target_include_directories(${PROJECT_NAME} PUBLIC - ${CMAKE_SOURCE_DIR}/reader - ${CMAKE_SOURCE_DIR}/reader/app - ${CMAKE_SOURCE_DIR}/reader/browser - ${CMAKE_SOURCE_DIR}/reader/document - ${CMAKE_SOURCE_DIR}/reader/sidebar - ${CMAKE_SOURCE_DIR}/reader/uiframe - ${CMAKE_SOURCE_DIR}/reader/widgets + ${READER_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/gtest ${PDFIUM_INCLUDE_DIRS}