function(group_sources root) function(__group_sources__ root prefix) file(GLOB entries RELATIVE "${root}" "${root}/*") foreach(entry ${entries}) set(abspath "${root}/${entry}") if(IS_DIRECTORY "${abspath}") __group_sources__("${abspath}" "${prefix}/${entry}") else() list(APPEND group "${abspath}") endif() endforeach() string(REPLACE "/" "\\" prefix "${prefix}") source_group("${prefix}" FILES ${group}) endfunction() get_filename_component(prefix "${root}" NAME) __group_sources__("${root}" "${prefix}") endfunction()Usage:
group_sources("${CMAKE_SOURCE_DIR}/src") group_sources("${CMAKE_SOURCE_DIR}/include")
Note this function only creates filters in project, you still need to add source files by ADD_EXECUTABLE or ADD_LIBRARY commands. For more complete example, see this gist.
其實最讓我驚訝的是 CMake 的 FUNCTION 可以巢狀宣告,而且真的有 scope,外面看不到裡面宣告的函式。
沒有留言:
張貼留言