@@ -32,13 +32,13 @@ function(LinkLibraries)
32
32
33
33
foreach (L ${PARAMS_LIB} )
34
34
if (NOT (TARGET ${L} ))
35
- target_link_libraries (${PARAMS_NAME} ${L} )
35
+ target_link_libraries (${PARAMS_NAME} PUBLIC ${L} )
36
36
continue ()
37
37
endif ()
38
38
39
39
get_target_property (3RD_TYPE ${L} 3RD_TYPE)
40
40
if (${3RD_TYPE} STREQUAL "3RD_TYPE-NOTFOUND" )
41
- target_link_libraries (${PARAMS_NAME} ${L} )
41
+ target_link_libraries (${PARAMS_NAME} PUBLIC ${L} )
42
42
else ()
43
43
get_target_property (INCLUDE ${L} 3RD_INCLUDE)
44
44
get_target_property (LINK ${L} 3RD_LINK)
@@ -51,7 +51,7 @@ function(LinkLibraries)
51
51
target_link_directories (${PARAMS_NAME} PUBLIC ${LINK} )
52
52
endif ()
53
53
if (NOT ("${LIB} " STREQUAL "LIB-NOTFOUND" ))
54
- target_link_libraries (${PARAMS_NAME} ${LIB} )
54
+ target_link_libraries (${PARAMS_NAME} PUBLIC ${LIB} )
55
55
endif ()
56
56
57
57
if (${3RD_TYPE} STREQUAL "CMakeProject" )
@@ -114,7 +114,7 @@ function(GetTargetRuntimeDependenciesRecurse)
114
114
endfunction ()
115
115
116
116
function (AddRuntimeDependenciesCopyCommand)
117
- cmake_parse_arguments (PARAMS "" "NAME" "" ${ARGN} )
117
+ cmake_parse_arguments (PARAMS "NOT_INSTALL " "NAME" "" ${ARGN} )
118
118
119
119
GetTargetRuntimeDependenciesRecurse(
120
120
NAME ${PARAMS_NAME}
@@ -127,21 +127,33 @@ function(AddRuntimeDependenciesCopyCommand)
127
127
list (GET TEMP 0 SRC)
128
128
list (GET TEMP 1 DST)
129
129
set (COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >/${DST} )
130
+ set (INSTALL_DST ${CMAKE_INSTALL_PREFIX} /Engine/Binaries/${DST} )
130
131
else ()
131
132
set (SRC ${R} )
132
133
set (COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >)
134
+ set (INSTALL_DST ${CMAKE_INSTALL_PREFIX} /Engine/Binaries)
133
135
endif ()
134
136
135
137
if (IS_DIRECTORY ${SRC} )
136
138
add_custom_command (
137
139
TARGET ${PARAMS_NAME} POST_BUILD
138
140
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${COPY_COMMAND}
139
141
)
142
+ if (NOT ${PARAMS_NOT_INSTALL} )
143
+ install (
144
+ DIRECTORY ${SRC} DESTINATION ${INSTALL_DST}
145
+ )
146
+ endif ()
140
147
else ()
141
148
add_custom_command (
142
149
TARGET ${PARAMS_NAME} POST_BUILD
143
150
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${COPY_COMMAND}
144
151
)
152
+ if (NOT ${PARAMS_NOT_INSTALL} )
153
+ install (
154
+ FILES ${SRC} DESTINATION ${INSTALL_DST}
155
+ )
156
+ endif ()
145
157
endif ()
146
158
endforeach ()
147
159
endfunction ()
@@ -158,7 +170,7 @@ function(ExpandResourcePathExpression)
158
170
endfunction ()
159
171
160
172
function (AddResourcesCopyCommand)
161
- cmake_parse_arguments (PARAMS "" "NAME" "RES" ${ARGN} )
173
+ cmake_parse_arguments (PARAMS "NOT_INSTALL " "NAME" "RES" ${ARGN} )
162
174
163
175
foreach (R ${PARAMS_RES} )
164
176
ExpandResourcePathExpression(
@@ -167,13 +179,19 @@ function(AddResourcesCopyCommand)
167
179
OUTPUT_DST DST
168
180
)
169
181
170
- list (APPEND COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >/${DST} )
182
+ list (APPEND COPY_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >/${DST} )
183
+
184
+ get_filename_component (ABSOLUTE_DST ${CMAKE_INSTALL_PREFIX} /Engine/Binaries/${DST} ABSOLUTE )
185
+ get_filename_component (DST_DIR ${ABSOLUTE_DST} DIRECTORY )
186
+ if (NOT ${PARAMS_NOT_INSTALL} )
187
+ install (FILES ${SRC} DESTINATION ${DST_DIR} )
188
+ endif ()
171
189
endforeach ()
172
190
173
191
set (COPY_RES_TARGET_NAME ${PARAMS_NAME} .CopyRes)
174
192
add_custom_target (
175
193
${COPY_RES_TARGET_NAME}
176
- ${COMMANDS }
194
+ ${COPY_COMMANDS }
177
195
)
178
196
add_dependencies (${PARAMS_NAME} ${COPY_RES_TARGET_NAME} )
179
197
endfunction ()
@@ -284,12 +302,18 @@ function(AddMirrorInfoSourceGenerationTarget)
284
302
endfunction ()
285
303
286
304
function (AddExecutable)
287
- cmake_parse_arguments (PARAMS "SAMPLE" "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN} )
305
+ cmake_parse_arguments (PARAMS "SAMPLE;NOT_INSTALL " "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN} )
288
306
289
307
if (${PARAMS_SAMPLE} AND (NOT ${BUILD_SAMPLE} ))
290
308
return ()
291
309
endif ()
292
310
311
+ if (${PARAMS_NOT_INSTALL} )
312
+ set (NOT_INSTALL_FLAG NOT_INSTALL)
313
+ else ()
314
+ set (NOT_INSTALL_FLAG "" )
315
+ endif ()
316
+
293
317
if (DEFINED PARAMS_REFLECT)
294
318
AddMirrorInfoSourceGenerationTarget(
295
319
NAME ${PARAMS_NAME}
@@ -324,10 +348,12 @@ function(AddExecutable)
324
348
)
325
349
AddRuntimeDependenciesCopyCommand(
326
350
NAME ${PARAMS_NAME}
351
+ ${NOT_INSTALL_FLAG}
327
352
)
328
353
AddResourcesCopyCommand(
329
354
NAME ${PARAMS_NAME}
330
355
RES ${PARAMS_RES}
356
+ ${NOT_INSTALL_FLAG}
331
357
)
332
358
if (DEFINED PARAMS_DEP_TARGET)
333
359
add_dependencies (${PARAMS_NAME} ${PARAMS_DEP_TARGET} )
@@ -339,10 +365,21 @@ function(AddExecutable)
339
365
if (${MSVC} )
340
366
set_target_properties (${PARAMS_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} )
341
367
endif ()
368
+
369
+ if (NOT ${PARAMS_NOT_INSTALL} )
370
+ install (
371
+ TARGETS ${PARAMS_NAME}
372
+ RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Binaries
373
+ )
374
+
375
+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
376
+ install (CODE "execute_process(COMMAND install_name_tool -add_rpath @executable_path ${CMAKE_INSTALL_PREFIX} /Engine/Binaries/$<TARGET_FILE_NAME:${PARAMS_NAME} >)" )
377
+ endif ()
378
+ endif ()
342
379
endfunction ()
343
380
344
381
function (AddLibrary)
345
- cmake_parse_arguments (PARAMS "" "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN} )
382
+ cmake_parse_arguments (PARAMS "NOT_INSTALL " "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN} )
346
383
347
384
if ("${PARAMS_TYPE} " STREQUAL "SHARED" )
348
385
list (APPEND PARAMS_PUBLIC_INC ${API_HEADER_DIR} /${PARAMS_NAME} )
@@ -413,6 +450,35 @@ function(AddLibrary)
413
450
if (DEFINED PARAMS_REFLECT)
414
451
add_dependencies (${PARAMS_NAME} ${GENERATED_TARGET} )
415
452
endif ()
453
+
454
+ if (NOT ${PARAMS_NOT_INSTALL} )
455
+ foreach (INC ${PARAMS_PUBLIC_INC} )
456
+ get_filename_component (ABSOLUTE_INC ${INC} ABSOLUTE )
457
+ file (GLOB_RECURSE PUBLIC_HEADERS ${ABSOLUTE_INC} /*.h)
458
+ target_sources (
459
+ ${PARAMS_NAME}
460
+ PUBLIC FILE_SET HEADERS
461
+ BASE_DIRS ${ABSOLUTE_INC} FILES ${PUBLIC_HEADERS}
462
+ )
463
+ endforeach ()
464
+
465
+ if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR "${PARAMS_TYPE} " STREQUAL "STATIC" )
466
+ install (
467
+ TARGETS ${PARAMS_NAME}
468
+ FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Include
469
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Lib
470
+ LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Lib
471
+ RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Binaries
472
+ )
473
+ endif ()
474
+
475
+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND "${PARAMS_TYPE} " STREQUAL "SHARED" )
476
+ install (
477
+ FILES $<TARGET_FILE:${PARAMS_NAME} >
478
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /Engine/Binaries
479
+ )
480
+ endif ()
481
+ endif ()
416
482
endfunction ()
417
483
418
484
function (AddTest)
@@ -456,10 +522,12 @@ function(AddTest)
456
522
)
457
523
AddRuntimeDependenciesCopyCommand(
458
524
NAME ${PARAMS_NAME}
525
+ NOT_INSTALL
459
526
)
460
527
AddResourcesCopyCommand(
461
528
NAME ${PARAMS_NAME}
462
529
RES ${PARAMS_RES}
530
+ NOT_INSTALL
463
531
)
464
532
if (DEFINED PARAMS_DEP_TARGET)
465
533
add_dependencies (${PARAMS_NAME} ${PARAMS_DEP_TARGET} )
0 commit comments