cmake: как создать фильтры visual studio
Я уже осмотрелся (StackOverflow и многое другое), и я пытаюсь использовать cmake для создания фильтров Visual Studio. У меня есть следующие папки:
src / math
src / import
src / ui
Я хотел бы создать фильтры, как указано выше.
"math": содержит все файлы cpp & h в src / math
"импорт": содержит все файлы cpp & h в src/import
"ui": содержит все cpp & H файлы в src / ui
Я пробовал несколько решений, но ни одно из них не работает!!!
вот последняя версия кода в CMakeList.txt:
set(VD_SRC "${VisualDesigner_SOURCE_DIR}/src/visualdesigner")
file(GLOB_RECURSE SRC_UI
"${VD_SRC}/ui/*.cpp", "${VD_SRC}/ui/*.h")
file(GLOB_RECURSE SRC_IMPORT
"${VD_SRC}/import/*.cpp",
"${VD_SRC}/import/*.h")
source_group("ui" FILES ${SRC_UI})
source_group("import" FILES ${SRC_IMPORT})
любая помощь приветствуется!
1 ответов
посмотреть как установить фильтры Visual Studio для вложенного подкаталога с помощью cmake
просто имейте в виду, что
- the
source_group()
работает только в сочетании сadd_library()
илиadd_executable()
команды с перечислением тех же источников (пути должны совпадать) - the
source_group()
команда не проверяет, существует ли файл на самом деле (поэтому он принимает все, что вы ему даете, и во время генерации файла проекта он пытается сопоставить заданные имена файлов исходной группы с файлами, используемыми в проекте)
Я дал вашему коду попробовать, добавив соответствующий add_library()
target и он работает так, как ожидалось (CMake 3.3.2 и VS2015):
set(VD_SRC "${VisualDesigner_SOURCE_DIR}/src/visualdesigner")
file(GLOB_RECURSE SRC_UI
"${VD_SRC}/ui/*.cpp"
"${VD_SRC}/ui/*.h"
)
file(GLOB_RECURSE SRC_IMPORT
"${VD_SRC}/import/*.cpp"
"${VD_SRC}/import/*.h"
)
add_library(VisalDesigner ${SRC_UI} ${SRC_IMPORT})
source_group("ui" FILES ${SRC_UI})
source_group("import" FILES ${SRC_IMPORT})
результаты
вот более обобщенная версия, взятая из Visual Studio в качестве редактора для дружественного проекта CMake:
set(_src_root_path "${VisualDesigner_SOURCE_DIR}/src/visualdesigner")
file(
GLOB_RECURSE _source_list
LIST_DIRECTORIES false
"${_src_root_path}/*.c*"
"${_src_root_path}/*.h*"
)
add_library(VisualDesigner ${_source_list})
foreach(_source IN ITEMS ${_source_list})
get_filename_component(_source_path "${_source}" PATH)
file(RELATIVE_PATH _source_path_rel "${_src_root_path}" "${_source_path}")
string(REPLACE "/" "\" _group_path "${_source_path_rel}")
source_group("${_group_path}" FILES "${_source}")
endforeach()