You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake中读取.lst文件并查找指定文件及其完整路径

CMake读取lst文件并获取指定文件的完整路径

针对需求——读取包含多文件路径的txt_filelist.lst,识别指定文件名并提取其完整路径,以下是具体的CMake实现方案:

实现步骤与代码

1. 读取并解析lst文件

先读取文件内容,将其按行分割为可遍历的列表:

# 读取lst文件的全部内容
file(READ "txt_filelist.lst" FILELIST_CONTENT)
# 将内容按换行符分割为行列表(兼容Windows和Unix换行格式)
string(REPLACE "\n" ";" FILELIST_LINES "${FILELIST_CONTENT}")
string(REPLACE "\r" ";" FILELIST_LINES "${FILELIST_LINES}")

2. 遍历匹配目标文件

定义要查找的目标文件名,遍历每一行提取文件名进行匹配,匹配成功则记录完整路径:

# 设置你要查找的目标文件名
set(TARGET_FILENAME "srcxx_xx_xx.txt")
# 初始化变量存储找到的完整路径
set(TARGET_FILE_PATH "")

foreach(LINE IN LISTS FILELIST_LINES)
    # 跳过空行
    if(NOT LINE)
        continue()
    endif()
    # 提取当前行的文件名部分
    get_filename_component(CURRENT_FILE_NAME "${LINE}" NAME)
    # 匹配目标文件名
    if(CURRENT_FILE_NAME STREQUAL "${TARGET_FILENAME}")
        set(TARGET_FILE_PATH "${LINE}")
        # 找到第一个匹配项后退出循环(若要找所有匹配项可删除此行)
        break()
    endif()
endforeach()

3. 输出结果验证

添加结果判断,输出找到的路径或提示未找到:

if(TARGET_FILE_PATH)
    message(STATUS "成功找到目标文件路径: ${TARGET_FILE_PATH}")
    # 可选:转换为绝对路径
    get_filename_component(TARGET_ABS_PATH "${TARGET_FILE_PATH}" ABSOLUTE)
    message(STATUS "目标文件绝对路径: ${TARGET_ABS_PATH}")
else()
    message(WARNING "未找到指定文件: ${TARGET_FILENAME}")
endif()

补充说明

  • 路径分隔符兼容:CMake会自动处理Windows的\和Unix的/路径分隔符,无需额外转义
  • 多匹配场景:如果需要找出所有同名文件,删除循环中的break(),并改用列表存储结果:
    set(TARGET_FILE_PATHS "")
    # ...循环内匹配成功时...
    list(APPEND TARGET_FILE_PATHS "${LINE}")
    
  • 相对路径处理:若lst文件中是相对路径,使用get_filename_component的ABSOLUTE选项可转换为绝对路径,确保路径有效性

内容的提问来源于stack exchange,提问作者Saravanan_Rk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:10:41