Add global readonly property for BUILDSYSTEM_TARGETS
Issue
Currently BUILDSYSTEM_TARGETS
can only be read via
get_property(ALL_BUILDSYSTEM_TARGETS DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
or via
get_directory_property(ALL_BUILDSYSTEM_TARGETS BUILDSYSTEM_TARGETS)
Example issue case
Helper method:
function(create_source_groups target)
message(${BUILDSYSTEM_TARGETS})
if (NOT TARGET ${target})
message("There is no target named ${target}.")
endif()
get_property(sources TARGET ${target} PROPERTY SOURCES)
foreach(filename ${sources})
if(${filename} MATCHES "ui_|cxx$")
source_group("Generated Files" FILES ${filename})
elseif(${filename} MATCHES "glsl$")
source_group("Shader Files" FILES ${filename})
elseif(${filename} MATCHES "qrc$|rc$")
source_group("Resources" FILES ${filename})
else()
source_group("${path}" FILES ${filename})
endif()
endforeach()
endfunction()
root/CMakeLists.txt:
add_subdirectory(src1)
add_subdirectory(src2)
root/src1/CMakeLists.txt:
add_library(MyLib1)
create_source_groups(MyLib1)
root/src2/CMakeLists.txt:
add_library(MyLib2)
create_source_groups(MyLib1)
How to solve the issue
Add a possibility to get all targets of a project via
get_property(ALL_BUILDSYSTEM_TARGETS GLOBAL PROPERTY BUILDSYSTEM_TARGETS)
Example use case
Helper method:
function(create_source_groups)
get_property(targets GLOBAL PROPERTY BUILDSYSTEM_TARGETS)
foreach(target ${targets})
get_property(sources TARGET ${target} PROPERTY SOURCES)
foreach(filename ${sources})
if(${filename} MATCHES "ui_|cxx$")
source_group("Generated Files" FILES ${filename})
elseif(${filename} MATCHES "glsl$")
source_group("Shader Files" FILES ${filename})
elseif(${filename} MATCHES "qrc$|rc$")
source_group("Resources" FILES ${filename})
else()
source_group("${path}" FILES ${filename})
endif()
endforeach()
endforeach()
endfunction()
root/CMakeLists.txt:
add_subdirectory(src1)
add_subdirectory(src2)
create_source_groups()
root/src1/CMakeLists.txt:
add_library(MyLib1)
root/src2/CMakeLists.txt:
add_library(MyLib2)