CMake 提供了几种方法来指定目标的源文件。一种是使用通配符(文档),例如:
FILE(GLOB MY_SRCS dir/*)
另一种方法是单独指定每个文件。
首选哪种方式?通配似乎很容易,但我听说它有一些缺点。
全面披露:我最初更喜欢 globbing 方法,因为它简单,但多年来我已经认识到,明确列出文件对于大型、多开发人员项目不太容易出错。
原答案:
globbing 的优点是:
使用硬编码文件列表的优点是:
为了解决第一个问题,您可以简单地“触摸”执行 glob 的 CMakeLists.txt,方法是使用 touch 命令或写入文件而不进行任何更改。这将强制 CMake 重新运行并获取新文件。
要解决第二个问题,您可以将代码仔细组织到目录中,无论如何您都可能这样做。在最坏的情况下,您可以使用以下list(REMOVE_ITEM)命令清理文件的全局列表:
list(REMOVE_ITEM)
file(GLOB to_remove file_to_remove.cpp) list(REMOVE_ITEM list ${to_remove})
唯一能咬到你的真实情况是,如果你使用git-bisect之类的东西在同一个构建目录中尝试旧版本的代码。在这种情况下,您可能需要清理和编译更多内容,以确保您在列表中获得正确的文件。这是一个极端的案例,而且你已经在你的脚趾上,这不是一个真正的问题。