如何在CMake的file(GLOB_RECURSE)命令中跳过符号链接?
CMake file(GLOB_RECURSE)过滤符号链接的实现方案
3.14及以上版本(推荐方案)
直接使用file(GLOB_RECURSE)内置的NO_SYMLINKS参数即可实现需求,该参数会自动将匹配结果中所有属于符号链接的文件剔除,仅保留普通文件。
示例用法:
file(GLOB_RECURSE RESULT_FILES NO_SYMLINKS LIST_DIRECTORIES false "src/*.c" # 此处替换为你需要的glob匹配规则 )
3.14以下版本兼容方案
如果使用的CMake版本低于3.14,没有内置NO_SYMLINKS参数,可以先全量获取匹配文件,再手动过滤符号链接:
# 先获取所有匹配的文件 file(GLOB_RECURSE ALL_MATCHED_FILES "src/*.c") set(FILTERED_FILES "") # 遍历过滤符号链接 foreach(CUR_FILE ${ALL_MATCHED_FILES}) if(NOT IS_SYMLINK ${CUR_FILE}) list(APPEND FILTERED_FILES ${CUR_FILE}) endif() endforeach()
注意:
file(GLOB_RECURSE)默认不会跟随遍历符号链接指向的目录,如果需要遍历符号链接目录,还需要额外添加FOLLOW_SYMLINKS参数。
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

