-
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathCMakeVisualStudioSourceGroup.cmake
56 lines (48 loc) · 1.6 KB
/
CMakeVisualStudioSourceGroup.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# group source on visual project
function(setup_project_group project_source current_dir)
foreach(source IN LISTS project_source)
# get source path
get_filename_component(source_path ${source} PATH)
# get source relative path
string(REPLACE "${current_dir}/./" "" source_relative ${source_path})
if(MSVC OR XCODE)
# get group name
string(REPLACE "/" "\\" group_name ${source_relative})
else()
set(group_name ${source_relative})
endif()
if("${source_relative}" STREQUAL "${source_path}")
# no need group because source is in $current_dir
else()
# setup project group
source_group("${group_name}" FILES "${source}")
endif()
endforeach()
endfunction()
function(setup_project_group_by_folder_relative project_source current_dir)
foreach(source IN LISTS project_source)
# get source path
get_filename_component(source_path ${source} PATH)
# get source relative path
string(REPLACE "${current_dir}" "" source_relative ${source_path})
if(MSVC OR XCODE)
# get group name
string(REPLACE "/" "\\" group_name ${source_relative})
set(group_name "Source Files\\${group_name}")
else()
set(group_name "Source Files\\${source_relative}")
endif()
if("${source_relative}" STREQUAL "${source_path}")
# no need group because source is in $current_dir
else()
# setup project group
source_group("${group_name}" FILES "${source}")
endif()
endforeach()
endfunction()
function(add_source_group project_source group_name)
foreach(source IN LISTS project_source)
# setup project group
source_group("${group_name}" FILES "${source}")
endforeach()
endfunction()