@@ -33,20 +33,7 @@ function(exp_gather_target_runtime_dependencies_recurse)
3333
3434 get_target_property (runtime_dep ${arg_NAME} RUNTIME_DEP)
3535 if (NOT ("${runtime_dep} " STREQUAL "runtime_dep-NOTFOUND" ))
36- foreach (r ${runtime_dep} )
37- # workaround to make EXPORT_PROPERTIES support generator expression
38- string (REPLACE "[" "$<" r "${r} " )
39- string (REPLACE "]" ">" r "${r} " )
40-
41- get_target_property (type ${arg_NAME} TYPE )
42- if (${type} STREQUAL "SHARED_LIBRARY" )
43- set (target_bin_dir $<TARGET_FILE_DIR:${arg_NAME} >)
44- else ()
45- set (target_bin_dir $<TARGET_FILE_DIR:${arg_NAME} >/../Binaries)
46- endif ()
47- string (REPLACE "$<TARGET_BIN_DIR>" ${target_bin_dir} temp_r ${r} )
48- list (APPEND result_runtime_dep ${temp_r} )
49- endforeach ()
36+ list (APPEND result_runtime_dep ${runtime_dep} )
5037 endif ()
5138
5239 get_target_property (libs ${arg_NAME} LINK_LIBRARIES )
@@ -100,6 +87,7 @@ function(exp_process_runtime_dependencies)
10087 list (APPEND dep_targets ${dep_dep_targets} )
10188 endforeach ()
10289
90+ set (copy_commands COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${arg_NAME} >)
10391 foreach (r ${runtime_deps} )
10492 list (APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} $<TARGET_FILE_DIR:${arg_NAME} >)
10593 endforeach ()
@@ -377,7 +365,7 @@ function(exp_add_executable)
377365 export (
378366 TARGETS ${arg_NAME}
379367 NAMESPACE ${SUB_PROJECT_NAME} ::
380- APPEND FILE ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} Targets.cmake
368+ APPEND FILE ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} Targets.cmake
381369 )
382370
383371 if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
@@ -389,7 +377,7 @@ endfunction()
389377function (exp_add_library)
390378 set (options NOT_INSTALL)
391379 set (singleValueArgs NAME TYPE )
392- set (multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB PRIVATE_MERGE_LIB PUBLIC_MERGE_LIB REFLECT)
380+ set (multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB REFLECT)
393381 cmake_parse_arguments (arg "${options} " "${singleValueArgs} " "${multiValueArgs} " ${ARGN} )
394382
395383 if ("${arg_TYPE} " STREQUAL "SHARED" )
@@ -441,27 +429,6 @@ function(exp_add_library)
441429 )
442430
443431 foreach (inc ${arg_PUBLIC_INC} )
444- list (APPEND public_inc ${inc} )
445- endforeach ()
446- foreach (lib ${arg_PUBLIC_MERGE_LIB} )
447- if (NOT TARGET ${lib} )
448- continue ()
449- endif ()
450-
451- get_target_property (target_includes ${lib} INTERFACE_INCLUDE_DIRECTORIES )
452- if ("${target_includes} " STREQUAL "target_includes-NOTFOUND" )
453- continue ()
454- endif ()
455-
456- string (REGEX MATCH "\\ $\\ <\\ $\\ <CONFIG:.+\\ >:(.+)>" match "${target_includes} " )
457- if (match)
458- list (APPEND public_inc ${CMAKE_MATCH_1} )
459- else ()
460- list (APPEND public_inc ${target_includes} )
461- endif ()
462- endforeach ()
463-
464- foreach (inc ${public_inc} )
465432 get_filename_component (absolute_inc ${inc} ABSOLUTE )
466433 list (APPEND public_build_inc $<BUILD_INTERFACE:${absolute_inc} >)
467434 endforeach ()
@@ -470,56 +437,17 @@ function(exp_add_library)
470437 PRIVATE ${arg_PRIVATE_INC}
471438 PUBLIC ${public_build_inc} $<INSTALL_INTERFACE:${SUB_PROJECT_NAME} /Target /${arg_NAME} /Include >
472439 )
473-
474440 target_link_directories (
475441 ${arg_NAME}
476442 PRIVATE ${arg_PRIVATE_LINK}
477443 PUBLIC ${arg_PUBLIC_LINK}
478444 )
479-
480- foreach (lib ${arg_PRIVATE_MERGE_LIB} )
481- list (APPEND merge_lib ${lib} )
482- endforeach ()
483- foreach (lib ${arg_PUBLIC_MERGE_LIB} )
484- list (APPEND merge_lib ${lib} )
485- endforeach ()
486-
487- foreach (lib ${merge_lib} )
488- list (APPEND build_merge_lib $<BUILD_INTERFACE:${lib} >)
489-
490- exp_gather_target_runtime_dependencies_recurse(
491- NAME ${lib}
492- OUT_RUNTIME_DEP temp_runtime_dep
493- )
494- list (APPEND runtime_dep ${temp_runtime_dep} )
495- endforeach ()
496445 target_link_libraries (
497446 ${arg_NAME}
498- PRIVATE ${build_merge_lib }
447+ PRIVATE ${arg_PRIVATE_LIB }
499448 PUBLIC ${arg_PUBLIC_LIB}
500449 )
501450
502- if (DEFINED runtime_dep)
503- foreach (r ${runtime_dep} )
504- get_filename_component (FILE_NAME ${r} NAME )
505- list (APPEND commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} ${runtime_output_dir} /${FILE_NAME} )
506- list (APPEND runtime_dep_files $<TARGET_BIN_DIR>/${FILE_NAME} )
507- endforeach ()
508- add_custom_command (
509- TARGET ${arg_NAME} POST_BUILD
510- ${commands}
511- )
512-
513- # workaround to make EXPORT_PROPERTIES support generator expression
514- string (REPLACE "$<" "[" runtime_dep_files "${runtime_dep_files} " )
515- string (REPLACE ">" "]" runtime_dep_files "${runtime_dep_files} " )
516- set_target_properties (
517- ${arg_NAME} PROPERTIES
518- EXPORT_PROPERTIES "RUNTIME_DEP"
519- RUNTIME_DEP "${runtime_dep_files} "
520- )
521- endif ()
522-
523451 if ("${arg_TYPE} " STREQUAL "SHARED" )
524452 string (TOUPPER ${arg_NAME} _API api_name)
525453 string (REPLACE "-" "/" api_dir ${arg_NAME} )
@@ -536,21 +464,14 @@ function(exp_add_library)
536464 endif ()
537465
538466 if (NOT ${arg_NOT_INSTALL} )
539- foreach (inc ${public_inc } )
467+ foreach (inc ${arg_PUBLIC_INC } )
540468 list (APPEND install_inc ${inc} /)
541469 endforeach ()
542470 install (
543471 DIRECTORY ${install_inc}
544472 DESTINATION ${SUB_PROJECT_NAME} /Target /${arg_NAME} /Include
545473 )
546474
547- if (DEFINED runtime_dep)
548- install (
549- FILES ${runtime_dep}
550- DESTINATION ${SUB_PROJECT_NAME} /Target /${arg_NAME} /Binaries
551- )
552- endif ()
553-
554475 install (
555476 TARGETS ${arg_NAME}
556477 EXPORT ${SUB_PROJECT_NAME} Targets
@@ -561,7 +482,7 @@ function(exp_add_library)
561482 export (
562483 TARGETS ${arg_NAME}
563484 NAMESPACE ${SUB_PROJECT_NAME} ::
564- APPEND FILE ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} Targets.cmake
485+ APPEND FILE ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} Targets.cmake
565486 )
566487
567488 if ("${arg_TYPE} " STREQUAL "SHARED" )
@@ -654,33 +575,57 @@ install(
654575 EXPORT ${SUB_PROJECT_NAME} Targets
655576 FILE ${SUB_PROJECT_NAME} Targets.cmake
656577 NAMESPACE ${SUB_PROJECT_NAME} ::
657- DESTINATION ${SUB_PROJECT_NAME} /CMake
578+ DESTINATION ${SUB_PROJECT_NAME}
658579)
659580
660581configure_package_config_file(
661582 ${CMAKE_CURRENT_LIST_DIR} /Config.cmake.in
662- ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} Config.cmake
583+ ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} Config.cmake
663584 INSTALL_DESTINATION ${SUB_PROJECT_NAME} /CMake
664585)
665586
666587write_basic_package_version_file(
667- ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} ConfigVersion.cmake
588+ ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} ConfigVersion.cmake
668589 VERSION ${SUB_PROJECT_VERSION_MAJOR} .${SUB_PROJECT_VERSION_MINOR} .${SUB_PROJECT_VERSION_PATCH}
669590 COMPATIBILITY SameMajorVersion
670591)
671592
672593install (
673594 FILES
674- ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} Config.cmake
675- ${CMAKE_BINARY_DIR} /CMake/ ${SUB_PROJECT_NAME} ConfigVersion.cmake
676- DESTINATION ${SUB_PROJECT_NAME} /CMake
595+ ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} Config.cmake
596+ ${CMAKE_BINARY_DIR} /${SUB_PROJECT_NAME} ConfigVersion.cmake
597+ DESTINATION ${SUB_PROJECT_NAME}
677598)
678599
679- file (GLOB all_cmake_libs ${CMAKE_CURRENT_LIST_DIR} /*)
680- foreach (cmake_lib ${all_cmake_libs} )
681- file (COPY ${cmake_lib} DESTINATION ${CMAKE_BINARY_DIR} /CMake)
600+ file (GLOB_RECURSE preset_cmake_libs ${CMAKE_CURRENT_LIST_DIR} /*)
601+ foreach (cmake_lib ${preset_cmake_libs} )
602+ file (
603+ COPY ${cmake_lib}
604+ DESTINATION ${CMAKE_BINARY_DIR} /CMake
605+ )
682606endforeach ()
683607install (
684- FILES ${all_cmake_libs }
608+ FILES ${preset_cmake_libs }
685609 DESTINATION ${SUB_PROJECT_NAME} /CMake
686610)
611+
612+ if (DEFINED SUB_PROJECT_CMAKE_LIBS)
613+ foreach (cmake_lib ${SUB_PROJECT_CMAKE_LIBS} )
614+ if (IS_ABSOLUTE ${cmake_lib} )
615+ message (FATAL_ERROR "project cmake libs defined in SUB_PROJECT_CMAKE_LIBS should be relative path from project root" )
616+ endif ()
617+
618+ set (src_file ${CMAKE_SOURCE_DIR} /${cmake_lib} )
619+ get_filename_component (binary_tree_dst_dir ${CMAKE_BINARY_DIR} /CMake/${cmake_lib} DIRECTORY )
620+ get_filename_component (install_tree_dst_dir ${SUB_PROJECT_NAME} /CMake/${cmake_lib} DIRECTORY )
621+
622+ file (
623+ COPY ${src_file}
624+ DESTINATION ${binary_tree_dst_dir}
625+ )
626+ install (
627+ FILES ${src_file}
628+ DESTINATION ${install_tree_dst_dir}
629+ )
630+ endforeach ()
631+ endif ()
0 commit comments