是否将文件夹下的所有文件添加到CMake glob?
我刚刚读到: 答案建议使用文件glob,例如:是否将文件夹下的所有文件添加到CMake glob?,cmake,glob,build-dependencies,Cmake,Glob,Build Dependencies,我刚刚读到: 答案建议使用文件glob,例如: file(GLOB "*.h" "*.cpp") 现在,如果我想让我的目标依赖于某个文件夹下某一类型的所有文件(可能在多个子文件夹中),该怎么办?我试着用 execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR) 然后 add_executable(foo ${BAR} 但这给了我一个错误: 找不到源文件: src/baz/some/file/her
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\u RECURSE…
您的第二个示例将转换为
file(GLOB_RECURSE BAR "src/baz/*.cpp")
参考资料
文件(全局递归…
?但是请注意并使用find
这种方式是个坏主意,但是您可以通过添加-type f
@bames53来解决您似乎遇到的问题:我会试试。关于这是一个坏主意-我已经阅读了Florian发布的链接,并且认为我同意@einpoklum上的第一条评论,我认为您引用的评论比较了错误的东西:“但是,如果您没有glob,您是否仍然必须手动更新CMakeLists.txt,这意味着cmake仍然不会自动更新构建系统?”最初关于全局文件不会自动更新生成系统的投诉与自动更新生成系统的系统不相比较。也许最初的观点没有说得那么清楚,但抱怨是关于这两种方法的失败模式。@einpoklum哦,我对使用find
这种方法的评论也不是关于通常的全球化问题。我建议不要在这里使用find
,原因是它添加了一个额外的依赖项,没有真正的原因<代码>文件(GLOB_RECURSE…在这里似乎是正确的。在这里添加可能很好,也可以使用内置的CMake变量来指示我们希望递归添加的文件的确切位置,即-file(GLOB_RECURSE SRC“${CMake_CURRENT_LIST_DIR}/SRC/*.cpp”)-将添加位于Src文件夹下的所有C++源文件,这些文件本身位于正在处理的当前CMAKIST.TXT文件所在的文件夹中。是否支持某些文件?
file(GLOB_RECURSE BAR "src/baz/*.cpp")