【发布时间】:2016-05-26 11:43:22
【问题描述】:
我刚刚读到这个:
CMake - Automatically add all files in a folder to a target?
答案建议使用文件 glob,例如:
file(GLOB "*.h" "*.cpp")
现在,如果我希望我的目标依赖于某个文件夹下某种类型的所有文件——可能位于多个子文件夹中,该怎么办?我尝试使用
execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR)
然后
add_executable(foo ${BAR}
但这给了我错误:
找不到源文件:
src/baz/some/file/here
src/baz/some/other_file/here
src/baz/some/other_file/here2
(是的,有那个间距。)
我在这里做错了什么?
【问题讨论】:
-
可能是
file(GLOB_RECURSE ...)?但请注意Why is cmake file GLOB evil? 和Best way to specify sourcefiles in CMake -
以这种方式使用
find是个坏主意,但您可以通过添加-type f来解决您似乎遇到的问题。 -
@einpoklum 基于 globing 的构建的故障模式可能难以诊断,甚至可能是静默、损坏的构建,这可能是由于与实际代码无关的问题而发生的源代码控制系统。基于显式文件列表的构建的失败模式是显式且可重现的失败,它可以由源代码控制系统中的实际代码控制/防止,无论开发人员检查代码可能会在他的工作目录中留下任何其他垃圾。
-
@einpoklum 哦,我对以这种方式使用
find的评论也不是关于通常的全局问题。我建议不要在这里使用find的原因是因为它无缘无故地添加了额外的依赖项。file(GLOB_RECURSE ...)在这里似乎是正确的。 -
CMake 的作者不建议在项目中使用,只能在脚本中使用。 presentation
标签: cmake glob build-dependencies