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

CMake如何判断字符串对应的路径是普通文件而非目录?

解决方案

CMake原生在if语句中提供了文件类型判断的内置条件,无需额外引入第三方工具:

  • 判断路径为目录:IS_DIRECTORY <目标路径>
  • 判断路径为普通文件:IS_FILE <目标路径>

你只需要修改原有代码中标记FIXME的判断分支,加入路径类型校验即可,修改后的代码片段如下:

# 跳过许可证名称不匹配、或者是目录的条目
if((NOT match) OR IS_DIRECTORY ${path_license})
    continue()
endif()

如果要更严谨,排除符号链接、设备文件等特殊文件类型(你提过暂不处理特殊场景,可自选),可以直接校验是否为普通文件:

if((NOT match) OR (NOT IS_FILE ${path_license}))
    continue()
endif()

可选优化建议(适配你后续要补充文件名列表的需求)

你现在用全路径匹配LICENSE字符串的逻辑可能出现误判,比如路径上级目录带LICENSE关键词也会被匹配到,后续可以改成仅匹配文件名,示例逻辑如下:

# 提前定义候选许可证文件名列表,后续直接在这里加即可
set(LICENSE_FILENAMES LICENSE COPYING COPYRIGHT)
# 取当前路径的文件名并转大写
get_filename_component(fname ${path_license} NAME)
string(TOUPPER ${fname} fname_up)
# 判断文件名是否在候选列表中
if(${fname_up} IN_LIST LICENSE_FILENAMES AND IS_FILE ${path_license})
    # 后续处理逻辑
endif()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:54:02