Используйте source_group из подкаталога в cmake

#cmake

#cmake

Вопрос:

В cmake вы можете группировать исходные файлы в вашей IDE с помощью source_group команды (в моем случае она создает фильтры в проекте Visual Studio).

У меня есть структура каталогов, подобная этой

 Main (dir)
   -- CMakeLists.txt
   -- main.cpp
   -- shaders(dir)
         -- CMakeLists.txt
         -- shader1.glsl
         -- shader2.glsl
  

Main/CMakeLists.txt:

 cmake_minimum_required (VERSION 3.13)
add_executable(myExec main.cpp)
add_subdirectory(shaders)
  

shaders/CMakeLists.txt:

 target_sources(myExec PRIVATE shader1.glsl shader2.glsl)
  

Если я добавлю source_group("Config Files" REGULAR_EXPRESSION ".*.glsl") в Main/CMakeLists.txt он создает фильтр, который содержит shader1.glsl и shader2.glsl, как и ожидалось. Если я, однако, использую его в shaders/CMakeList.txt он не добавляет фильтр, и shader1.glsl и shader2.glsl отображаются непосредственно в проекте myExec.

Мне кажется, что source_group это применимо только к целевым объектам, созданным в том же CMakeList.txt файл. Это поведение не очевидно для меня из его документации.

Это где-нибудь задокументировано? И есть ли какой-либо способ использовать source_group из подкаталога (для меня было бы логичнее всего сохранить все, что связано с шейдером в shaders/CMakeLists.txt)?

Комментарии:

1. Тем временем документация была обновлена: «Область действия группы ограничена каталогом, в котором вызывается команда, и применяется к источникам в целевых объектах, созданных в этом каталоге». cmake.org/cmake/help/v3.23/command/source_group.html