# 简化版本,使用 echo 和 cat 组合
function(generate_raw_string_header TARGET_NAME OUTPUT_FILE)
    # 解析参数
    set(INPUT_FILES ${ARGN})
    
    # 检查是否提供了起始和结束标记
    list(LENGTH INPUT_FILES NUM_ARGS)
    set(START_PATTERN "")
    set(END_PATTERN "")
    set(REAL_INPUT_FILES "")
    
    if(NUM_ARGS GREATER 1)
        # 最后两个参数可能是 START_PATTERN 和 END_PATTERN
        list(GET INPUT_FILES -1 LAST_ARG)
        list(GET INPUT_FILES -2 SECOND_LAST_ARG)
        
        # 检查这两个参数是否看起来像标记(不是文件路径)
        if(NOT LAST_ARG MATCHES "\\.h$" AND NOT LAST_ARG MATCHES "\\.cpp$")
            set(END_PATTERN ${LAST_ARG})
            list(REMOVE_AT INPUT_FILES -1)
        endif()
        
        if(NOT SECOND_LAST_ARG MATCHES "\\.h$" AND NOT SECOND_LAST_ARG MATCHES "\\.cpp$")
            set(START_PATTERN ${SECOND_LAST_ARG})
            list(REMOVE_AT INPUT_FILES -1)
        endif()
        
        set(REAL_INPUT_FILES ${INPUT_FILES})
    else()
        set(REAL_INPUT_FILES ${INPUT_FILES})
    endif()

    # 构建命令
    if(START_PATTERN STREQUAL "" AND END_PATTERN STREQUAL "")
        # 没有指定标记,读取整个文件
        set(EXTRACT_CMD "cat ${REAL_INPUT_FILES}")
    else()
        # 提取两个标记之间的内容(不包含标记行)
        if(START_PATTERN STREQUAL "")
            set(START_PATTERN "^")
        endif()
        if(END_PATTERN STREQUAL "")
            set(END_PATTERN "$")
        endif()
        # 使用 awk 提取,不包含起始和结束标记行
        set(EXTRACT_CMD "awk '/${START_PATTERN}/{flag=1;next} /${END_PATTERN}/{if(flag) exit} flag' ${REAL_INPUT_FILES}")
    endif()

    # 创建自定义命令
    add_custom_command(
            OUTPUT ${OUTPUT_FILE}
            COMMAND bash -c "echo 'R\"===(' > ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE} && ${EXTRACT_CMD} >> ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE} && echo ')===\"' >> ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}"
            DEPENDS ${REAL_INPUT_FILES}
            COMMENT "Generating ${OUTPUT_FILE} from ${REAL_INPUT_FILES}"
            VERBATIM
    )

    # 创建自定义目标
    add_custom_target(${TARGET_NAME}_text ALL
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}
    )

    # 创建接口库
    add_library(${TARGET_NAME} INTERFACE)

    # 设置接口库的包含目录
    target_include_directories(${TARGET_NAME} INTERFACE
            ${CMAKE_CURRENT_BINARY_DIR}
            ..
    )

    # 添加依赖关系
    add_dependencies(${TARGET_NAME} ${TARGET_NAME}_text)
endfunction()