J'ai déjà regardé autour de moi (StackOverflow et plus) et j'essaie d'utiliser cmake pour générer des filtres Visual Studio. J'ai les dossiers suivants:
src/math
src/import
src/ui
Je voudrais générer les filtres comme ci-dessus.
"math": contient tous les fichiers cpp & h dans src/math
"import": contient tous les fichiers cpp & h dans src/import
"ui": contient tous les fichiers cpp & h de src/ui
J'ai essayé plusieurs solutions, mais aucune ne semble fonctionner !!!
Voici la dernière version du code dans 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})
Toute aide est la bienvenue!
Voir Comment définir des filtres Visual Studio pour les sous-répertoires imbriqués à l'aide de cmake
Sachez simplement que
source_group()
fonctionne uniquement avec les commandes add_library()
ou add_executable()
/ répertoriant les mêmes sources (les chemins doivent correspondre)source_group()
ne vérifie pas si le fichier existe réellement (donc, tout ce que vous lui donnez est utilisé et tente de faire correspondre les noms de fichier du groupe source avec les fichiers utilisés dans le projet)J'ai essayé votre code en ajoutant une cible add_library()
correspondante et il fonctionne comme prévu (CMake 3.3.2 et 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})
Résulte en
Voici une version plus générale tirée de Visual Studio en tant qu'éditeur pour le projet convivial de 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()
J'ai trouvé cela plus facile et j'ai pensé que cela pourrait être utile aux autres. Assurez-vous que vous utilisez la dernière version de CMAKE.
file(GLOB_RECURSE _source_list *.cpp* *.h* *.hpp*)
foreach(_source IN ITEMS ${_source_list})
get_filename_component(_source_path "${_source}" PATH)
string(REPLACE "${CMAKE_SOURCE_DIR}" "" _group_path "${_source_path}")
string(REPLACE "/" "\\" _group_path "${_group_path}")
source_group("${_group_path}" FILES "${_source}")
endforeach()