将文件夹下的所有文件添加到CMake glob?

ein*_*ica 9 glob cmake build-dependencies

我刚看过这个:

CMake - 自动将文件夹中的所有文件添加到目标?

答案表明文件为glob,例如:

file(GLOB "*.h" "*.cpp")
Run Code Online (Sandbox Code Playgroud)

现在,如果我希望我的目标依赖于特定文件夹下某种类型的所有文件 - 可能在多个子文件夹中,该怎么办?我试过用

execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR)
Run Code Online (Sandbox Code Playgroud)

然后

add_executable(foo ${BAR}
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

找不到源文件:

  src/baz/some/file/here

src/baz/some/other_file/here

src/baz/some/other_file/here2
Run Code Online (Sandbox Code Playgroud)

(是的,有那个间距.)

我在这做错了什么?

Flo*_*ian 17

将我的评论转化为答案

如果要添加递归搜索文件使用 file(GLOB_RECURSE ...)

file(GLOB_RECURSE source_list "*.cpp" "*.hpp")
Run Code Online (Sandbox Code Playgroud)

你的第二个例子将转化为

file(GLOB_RECURSE BAR "src/baz/*.cpp")
Run Code Online (Sandbox Code Playgroud)

参考

  • 在这里添加可能是好的,也可以使用内置的CMake变量来指示我们希望递归添加的文件的确切位置,即 - file(GLOB_RECURSE SRC"$ {CMAKE_CURRENT_LIST_DIR}/src/*.cpp") - 将添加位于src文件夹下的所有C++源文件,该文件夹本身位于正在处理的当前CMakeList.txt文件所在的同一文件夹中. (3认同)