aboutsummaryrefslogtreecommitdiff
path: root/src/teakra/CMakeModules
diff options
context:
space:
mode:
Diffstat (limited to 'src/teakra/CMakeModules')
-rw-r--r--src/teakra/CMakeModules/CreateDirectoryGroups.cmake17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/teakra/CMakeModules/CreateDirectoryGroups.cmake b/src/teakra/CMakeModules/CreateDirectoryGroups.cmake
new file mode 100644
index 0000000..175899e
--- /dev/null
+++ b/src/teakra/CMakeModules/CreateDirectoryGroups.cmake
@@ -0,0 +1,17 @@
+# This function should be passed a name of an existing target. It will automatically generate
+# file groups following the directory hierarchy, so that the layout of the files in IDEs matches the
+# one in the filesystem.
+function(create_target_directory_groups target_name)
+ # Place any files that aren't in the source list in a separate group so that they don't get in
+ # the way.
+ source_group("Other Files" REGULAR_EXPRESSION ".")
+
+ get_target_property(target_sources "${target_name}" SOURCES)
+
+ foreach(file_name IN LISTS target_sources)
+ get_filename_component(dir_name "${file_name}" PATH)
+ # Group names use '\' as a separator even though the entire rest of CMake uses '/'...
+ string(REPLACE "/" "\\" group_name "${dir_name}")
+ source_group("${group_name}" FILES "${file_name}")
+ endforeach()
+endfunction()