cmake_minimum_required (VERSION 3.8) project(SourceGroups) # this is not really a test which can fail # it is more an example with several source_group() # commands. # The created projects have to be loaded manually # in Visual Studio/Xcode/Eclipse/... # to see whether the correct groups have been created. source_group(Base FILES main.c) # a sub group source_group(Base\\Sub1 FILES sub1/foo.c) # a sub sub group source_group(Base\\Sub1\\Sub2 FILES sub1/foobar.c) # a group with empty name source_group("" FILES foo.c) # a group, whose name consists only of the delimiter #should be handled the same way as an empty name source_group("\\" FILES baz.c) # a sub sub group whose last component has the same name # as an already existing group source_group(Base\\Sub1\\Base FILES bar.c) # a group without files, is currently not created source_group(EmptyGroup) set(root ${CMAKE_CURRENT_SOURCE_DIR}) set(tree_files_without_prefix ${root}/sub1/tree_bar.c sub1/tree_baz.c sub1/../sub1/tree_subdir/tree_foobar.c) set(tree_files_with_prefix ${root}/tree_prefix_foo.c tree_prefix_bar.c) source_group(TREE ${root} FILES ${tree_files_without_prefix}) source_group(TREE ${root} PREFIX tree_root/subgroup FILES ${tree_files_with_prefix}) add_executable(SourceGroups main.c bar.c foo.c sub1/foo.c sub1/foobar.c baz.c ${tree_files_with_prefix} ${tree_files_without_prefix} README.txt)