Add all files under a folder to a CMake glob?

einpoklum picture einpoklum · Feb 15, 2016 · Viewed 32.1k times · Source

I've just read this:

CMake - Automatically add all files in a folder to a target?

With the answer suggesting a file glob, e.g.:

file(GLOB "*.h" "*.cpp")

now, what if I want my target to depend on all files of a certain type under a certain folder - which might be within multiple subfolders? I tried using

execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR)

and then

add_executable(foo ${BAR}

but this gives me the error:

Cannot find source file:

  src/baz/some/file/here

src/baz/some/other_file/here

src/baz/some/other_file/here2

(yes, with that spacing.)

What am I doing wrong here?

Answer

Florian picture Florian · Feb 16, 2016

Turning my comment into an answer

If you want to add recursive searching for files use file(GLOB_RECURSE ...)

file(GLOB_RECURSE source_list "*.cpp" "*.hpp")

Your second example would translate into

file(GLOB_RECURSE BAR "src/baz/*.cpp")

References