【问题标题】:CMake glob list of files without directory pathCMake没有目录路径的文件的全局列表
【发布时间】:2018-06-07 09:49:19
【问题描述】:

我在这个网站及其他地方进行了大量搜索,但我似乎无法找到解决这个问题的方法:

如果您在 CMake 中使用 file(GLOB..) 对文件列表进行全局化,则所有文件都会列出并附有完整路径。

如何在 CMake 中全局化一组文件,只保存文件名?

我阅读了official manual 并在这里找到了这个:

 file(GLOB <variable>
 [LIST_DIRECTORIES true|false] [RELATIVE <path>]
 [<globbing-expressions>...])

 By default GLOB lists directories - directories are omitted in result 
 if LIST_DIRECTORIES is set to false.

我尝试了这些解决方案,但都不起作用:

file(GLOB_RECURSE src_files LIST_DIRECTORIES false ${SRC})

file(GLOB_RECURSE src_files LIST_DIRECTORIES=false ${SRC})

file(GLOB_RECURSE src_files LIST_DIRECTORIES(false) ${SRC})

set(LIST_DIRECTORIES false)
file(GLOB_RECURSE src_files ${SRC})

但这些似乎都不起作用。我的输出始终是附有完整路径的文件列表。我知道我可以使用 RELATIVE 来相应地设置路径,但如果可以的话,我宁愿避免它。

感谢您的回答!

【问题讨论】:

  • 为什么使用完整路径会出现问题?您要解决的实际问题是什么?
  • “我知道我可以使用 RELATIVE 来相应地设置路径,但如果可以的话,我宁愿避免它。” - 但是 RELATIVE 是从结果路径中去除目录组件的确切方式。为什么要避免它?
  • 实际问题是我需要将一组文件(来自不同的文件夹)和符号链接到一个文件夹中。我想避免 RELATIVE 因为我需要创建很多文件(GLOB ...)而且我认为这不是很好。
  • 哦,所以使用 GLOB_RECURSE 是有意的。您引用了file(GLOB) 的签名,所以我认为您在代码中使用了file(GLOB_RECURSE)

标签: c++ cmake glob


【解决方案1】:

LIST_DIRECTORIES 用于在给定位置${SRC} 包含文件和目录的情况下在结果中包含/排除目录。

如果您想摆脱路径,请在来自file(GLOB_RECURSE...) 的结果上使用foreachget_filename_component

【讨论】:

  • 谢谢你的回答,真的很棒!现在它工作得很好!
【解决方案2】:

试试

file(GLOB_RECURSE LIST_DIRECTORIES false src_files ${SRC})

文档有误,LIST_DIRECTORIES 在变量之前

【讨论】:

  • 这会将文件列表存储在 LIST_DIRECTORIES 变量中。文档是正确的。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多