@@ -32,13 +32,13 @@ function(LinkLibraries)
3232
3333 foreach (L ${PARAMS_LIB} )
3434 if (NOT (TARGET ${L} ))
35- target_link_libraries (${PARAMS_NAME} ${L} )
35+ target_link_libraries (${PARAMS_NAME} PUBLIC ${L} )
3636 continue ()
3737 endif ()
3838
3939 get_target_property (3RD_TYPE ${L} 3RD_TYPE)
4040 if (${3RD_TYPE} STREQUAL "3RD_TYPE-NOTFOUND" )
41- target_link_libraries (${PARAMS_NAME} ${L} )
41+ target_link_libraries (${PARAMS_NAME} PUBLIC ${L} )
4242 else ()
4343 get_target_property (INCLUDE ${L} 3RD_INCLUDE)
4444 get_target_property (LINK ${L} 3RD_LINK)
@@ -51,7 +51,7 @@ function(LinkLibraries)
5151 target_link_directories (${PARAMS_NAME} PUBLIC ${LINK} )
5252 endif ()
5353 if (NOT ("${LIB} " STREQUAL "LIB-NOTFOUND" ))
54- target_link_libraries (${PARAMS_NAME} ${LIB} )
54+ target_link_libraries (${PARAMS_NAME} PUBLIC ${LIB} )
5555 endif ()
5656
5757 if (${3RD_TYPE} STREQUAL "CMakeProject" )
@@ -114,7 +114,7 @@ function(GetTargetRuntimeDependenciesRecurse)
114114endfunction ()
115115
116116function (AddRuntimeDependenciesCopyCommand)
117- cmake_parse_arguments (PARAMS "" "NAME" "" ${ARGN} )
117+ cmake_parse_arguments (PARAMS "NOT_INSTALL " "NAME" "" ${ARGN} )
118118
119119 GetTargetRuntimeDependenciesRecurse(
120120 NAME ${PARAMS_NAME}
@@ -127,21 +127,33 @@ function(AddRuntimeDependenciesCopyCommand)
127127 list (GET TEMP 0 SRC)
128128 list (GET TEMP 1 DST)
129129 set (COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >/${DST} )
130+ set (INSTALL_DST ${CMAKE_INSTALL_PREFIX} /Engine/Binaries/${DST} )
130131 else ()
131132 set (SRC ${R} )
132133 set (COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME} >)
134+ set (INSTALL_DST ${CMAKE_INSTALL_PREFIX} /Engine/Binaries)
133135 endif ()
134136
135137 if (IS_DIRECTORY ${SRC} )
136138 add_custom_command (
137139 TARGET ${PARAMS_NAME} POST_BUILD
138140 COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${COPY_COMMAND}
139141 )
142+ if (NOT ${PARAMS_NOT_INSTALL} )
143+ install (
144+ DIRECTORY ${SRC} DESTINATION ${INSTALL_DST}
145+ )
146+ endif ()
140147 else ()
141148 add_custom_command (
142149 TARGET ${PARAMS_NAME} POST_BUILD
143150 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${COPY_COMMAND}
144151 )
152+ if (NOT ${PARAMS_NOT_INSTALL} )
153+ install (
154+ FILES ${SRC} DESTINATION ${INSTALL_DST}
155+ )
156+ endif ()
145157 endif ()
146158 endforeach ()
147159endfunction ()
@@ -158,7 +170,7 @@ function(ExpandResourcePathExpression)
158170endfunction ()
159171
160172function (AddResourcesCopyCommand)
161- cmake_parse_arguments (PARAMS "" "NAME" "RES" ${ARGN} )
173+ cmake_parse_arguments (PARAMS "NOT_INSTALL " "NAME" "RES" ${ARGN} )
162174
163175 foreach (R ${PARAMS_RES} )
164176 ExpandResourcePathExpression(
@@ -167,13 +179,19 @@ function(AddResourcesCopyCommand)
167179 OUTPUT_DST DST
168180 )
169181
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 ()
171189 endforeach ()
172190
173191 set (COPY_RES_TARGET_NAME ${PARAMS_NAME} .CopyRes)
174192 add_custom_target (
175193 ${COPY_RES_TARGET_NAME}
176- ${COMMANDS }
194+ ${COPY_COMMANDS }
177195 )
178196 add_dependencies (${PARAMS_NAME} ${COPY_RES_TARGET_NAME} )
179197endfunction ()
@@ -284,12 +302,18 @@ function(AddMirrorInfoSourceGenerationTarget)
284302endfunction ()
285303
286304function (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} )
288306
289307 if (${PARAMS_SAMPLE} AND (NOT ${BUILD_SAMPLE} ))
290308 return ()
291309 endif ()
292310
311+ if (${PARAMS_NOT_INSTALL} )
312+ set (NOT_INSTALL_FLAG NOT_INSTALL)
313+ else ()
314+ set (NOT_INSTALL_FLAG "" )
315+ endif ()
316+
293317 if (DEFINED PARAMS_REFLECT)
294318 AddMirrorInfoSourceGenerationTarget(
295319 NAME ${PARAMS_NAME}
@@ -324,10 +348,12 @@ function(AddExecutable)
324348 )
325349 AddRuntimeDependenciesCopyCommand(
326350 NAME ${PARAMS_NAME}
351+ ${NOT_INSTALL_FLAG}
327352 )
328353 AddResourcesCopyCommand(
329354 NAME ${PARAMS_NAME}
330355 RES ${PARAMS_RES}
356+ ${NOT_INSTALL_FLAG}
331357 )
332358 if (DEFINED PARAMS_DEP_TARGET)
333359 add_dependencies (${PARAMS_NAME} ${PARAMS_DEP_TARGET} )
@@ -339,10 +365,21 @@ function(AddExecutable)
339365 if (${MSVC} )
340366 set_target_properties (${PARAMS_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} )
341367 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 ()
342379endfunction ()
343380
344381function (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} )
346383
347384 if ("${PARAMS_TYPE} " STREQUAL "SHARED" )
348385 list (APPEND PARAMS_PUBLIC_INC ${API_HEADER_DIR} /${PARAMS_NAME} )
@@ -413,6 +450,35 @@ function(AddLibrary)
413450 if (DEFINED PARAMS_REFLECT)
414451 add_dependencies (${PARAMS_NAME} ${GENERATED_TARGET} )
415452 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 ()
416482endfunction ()
417483
418484function (AddTest)
@@ -456,10 +522,12 @@ function(AddTest)
456522 )
457523 AddRuntimeDependenciesCopyCommand(
458524 NAME ${PARAMS_NAME}
525+ NOT_INSTALL
459526 )
460527 AddResourcesCopyCommand(
461528 NAME ${PARAMS_NAME}
462529 RES ${PARAMS_RES}
530+ NOT_INSTALL
463531 )
464532 if (DEFINED PARAMS_DEP_TARGET)
465533 add_dependencies (${PARAMS_NAME} ${PARAMS_DEP_TARGET} )
0 commit comments