为了账号安全,请及时绑定邮箱和手机立即绑定

在CMake中使用GLOB或每个文件单独指定源文件是否更好?

在CMake中使用GLOB或每个文件单独指定源文件是否更好?

莫回无 2019-07-26 11:43:17
在CMake中使用GLOB或每个文件单独指定源文件是否更好?CMake提供了几种指定目标源文件的方法。一种是使用globbing(文档),例如:FILE (GLOB dir/*)另一个是单独指定每个文件。哪种方式更喜欢?Globbing似乎很容易,但我听说它有一些缺点。
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

完全披露:我最初倾向于简化泛化方法,但多年来我逐渐认识到明确列出文件对于大型多开发人员项目来说不易出错。

原始答案:


通配的优点是:

  • 添加新文件很容易,因为它们只列在一个地方:磁盘上。不是globbing会创建重复。

  • 您的CMakeLists.txt文件将更短。如果你有很多文件,这是一个很大的优势。不是globbing会导致您丢失巨大的文件列表中的CMake逻辑。

使用硬编码文件列表的优点是:

  • CMake将正确跟踪磁盘上新文件的依赖关系 - 如果我们使用glob,那么当你运行时,第一次没有全局文件的文件将无法获取

  • 您确保只添加所需的文件。Globbing可能会拾取您不想要的杂散文件。

为了解决第一个问题,您可以通过使用touch命令或通过编写没有更改的文件来“触摸”执行glob的CMakeLists.txt。这将迫使cmake重新运行并获取新文件。

要解决第二个问题,您可以将代码小心地组织到目录中,这也是您可能要做的事情。在最坏的情况下,您可以使用list(REMOVE_ITEM)命令来清理全局文件列表:

file(GLOB to_remove file_to_remove.cpp)list(REMOVE_ITEM list ${to_remove})

唯一可以咬你的真实情况是,如果你使用像git-bisect这样的东西来在同一个构建目录中尝试旧版本的代码。在这种情况下,您可能需要清理和编译超过必要的内容,以确保您在列表中获得正确的文件。这是一个极端的案例,而且你已经在你的脚趾上,这不是一个真正的问题。


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 7095 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信