LoveMacros.cmake 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # Group all related stuff in folders in Visual Studio
  2. function(love_group_projects)
  3. set(options NESTED)
  4. set(oneValueArgs NAME)
  5. set(multiValueArgs TARGETS)
  6. cmake_parse_arguments(LOVE_GROUP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  7. foreach(TARGET_NAME ${LOVE_GROUP_TARGETS})
  8. if (TARGET ${TARGET_NAME})
  9. get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE)
  10. # If this is an interface target, walk the children
  11. if (${TARGET_TYPE} STREQUAL "INTERFACE_LIBRARY")
  12. get_target_property(TARGET_LIBS ${TARGET_NAME} INTERFACE_LINK_LIBRARIES)
  13. foreach(TARGET_LIB ${TARGET_LIBS})
  14. # Is this a target? (Could also be a .lib file)
  15. if (TARGET ${TARGET_LIB})
  16. # Resolve aliased target
  17. get_target_property(ORIGINAL_TARGET ${TARGET_LIB} ALIASED_TARGET)
  18. if (ORIGINAL_TARGET)
  19. set(TARGET_LIB ${ORIGINAL_TARGET})
  20. endif()
  21. # Do we want to nest per-project?
  22. if (LOVE_GROUP_NESTED)
  23. set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}/${TARGET_NAME}")
  24. else()
  25. set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
  26. endif()
  27. endif()
  28. endforeach()
  29. else()
  30. # This is no interface library, so group it under the root 'NAME' node
  31. set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
  32. endif()
  33. endif()
  34. endforeach()
  35. endfunction()