-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathProjectPostProcess.cmake
More file actions
64 lines (51 loc) · 2.62 KB
/
Copy pathProjectPostProcess.cmake
File metadata and controls
64 lines (51 loc) · 2.62 KB
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
57
58
59
60
61
62
63
64
message("后处理项目:${AllProjects}")
foreach(ProjectName ${AllProjects})
# 统计所有依赖项
set(RealDependencies "")
set(SourceDependencies ${${ProjectName}Dependencies})
while(NOT SourceDependencies STREQUAL "") # 递归添加所有依赖项
set(Dependencies ${SourceDependencies})
set(SourceDependencies "")
foreach(dependency ${Dependencies})
list(PREPEND RealDependencies ${dependency})
list(APPEND SourceDependencies ${${dependency}Dependencies})
endforeach()
endwhile()
if(NOT RealDependencies STREQUAL "")
list(REMOVE_DUPLICATES RealDependencies)
set(${ProjectName}Dependencies ${RealDependencies} CACHE STRING "项目依赖的其他项目" FORCE)
message("发现依赖项目:${ProjectName}->${${ProjectName}Dependencies}")
endif()
# 统计所有依赖资源
set(ALLResourcesPaths "")
list(APPEND RealDependencies ${ProjectName}) # 自身也可能有资源文件
foreach(dependency ${RealDependencies})
# 查看依赖的Resources文件
file(GLOB_RECURSE ResourcesPaths LIST_DIRECTORIES true "${${dependency}Source}/[!.]")
list(FILTER ResourcesPaths INCLUDE REGEX "Resources$")
list(APPEND ALLResourcesPaths ${ResourcesPaths})
endforeach()
if(NOT ALLResourcesPaths STREQUAL "")
set(${ProjectName}Resources ${ALLResourcesPaths} CACHE STRING "项目依赖的资源" FORCE)
message("发现依赖资源:${ProjectName}->${${ProjectName}Resources}")
endif()
get_target_property(ProjectType ${ProjectName} TYPE) # 获取项目类型
# 可执行项目作为最终编译目标需要进行一些处理
if(${ProjectType} STREQUAL "EXECUTABLE")
# 处理库初始化文件
foreach(dependency ${${ProjectName}Dependencies})
set(LibraryInitFile "${${dependency}Source}/__Init__.h") # 库初始化文件
# 目标库存在初始化文件,需要记录到项目初始化文件中
if(EXISTS ${LibraryInitFile})
set(ProjectInitFile "${${ProjectName}Source}/__Init__.cpp") # 项目初始化地址
file(RELATIVE_PATH relative_path "${${dependency}Source}/../.." ${LibraryInitFile})
file(APPEND ${ProjectInitFile} "#include \"${relative_path}\"\n")
endif()
endforeach()
# 处理资源依赖
get_target_property(OUTPUT_DIRECTORY ${ProjectName} RUNTIME_OUTPUT_DIRECTORY)
foreach(ResourcesPath ${ALLResourcesPaths})
file(COPY ${ResourcesPath} DESTINATION ${OUTPUT_DIRECTORY})
endforeach()
endif()
endforeach()