web-dev-qa-db-fra.com

Projet QtCreator CMake - Comment afficher tous les fichiers du projet

J'utilise QtCreator pour ouvrir le projet CMake. Certains répertoires, à l'exception de CMakeLists.txt, ne contiennent que les fichiers d'en-tête * .h. Pour ces répertoires, QtCreator dans la vue de l'arborescence du projet n'affiche que CMakeLists.txt. Comment résoudre ce problème? J'ai besoin de voir tous les fichiers de projet de QtCreator.

26
Irbis

Afficher le projet en tant que système de fichiers n’est pas une solution car les paramètres de votre éditeur de projet, par exemple, ne s’appliqueraient pas… .. Et je n’aime pas ajouter d’en-têtes à une cible exécutable, car ils n’y appartiennent pas vraiment. Vous êtes effectivement paralyser le fichier de projet pour qu'il fonctionne bien avec un IDE particulier ... ce n'est pas bien ... L'option de nettoyage, à mon humble avis, serait:

FILE(GLOB_RECURSE LibFiles "include/*.hpp")
add_custom_target(headers SOURCES ${LibFiles})

En bonus, vos inclus sont affichés dans un dossier séparé . (Emprunté à https://cmake.org/pipermail/cmake/2012- August/051811.html )

25
Slava

Je vous suggère de basculer la vue de votre projet sur File System. Cela afficherait une vue où vous pourriez voir n’importe quel fichier:

enter image description here

Vous voudrez peut-être diviser votre vue de projet en deux en cliquant sur le deuxième à droite du bouton, si vous souhaitez toujours utiliser le mode Projets.

12
Jingjie Zheng

Vous devez ajouter des fichiers d’en-tête à la liste de vos fichiers source: add_executable(${Executable} ${Sources} ${headers})

Vous pouvez utiliser GLOB_RECURSE si vous avez plusieurs fichiers d'en-tête:

FILE(GLOB_RECURSE INC_ALL "headers/*.h")
include_directories("headers")
add_executable(main "main.cpp" ${INC_ALL})

N'oubliez pas de réexécuter CMake (Build> Run Cmake).

7
Meysam Mohammadi

Basé sur un autre thread posant la même question, j'ai trouvé une solution générique au problème, fonctionnant pour tous les IDE (au moins testé avec QtCreator et Visual Studio).

Peut être trouvé ici: https://github.com/sauter-hq/cmake-ide-support

# \brief adds for the given target a fake executable targets which allows all
#        headers and symbols to be shown in IDEs.
# \param target_name Which target properties should be added to the IDE support target.
function(target_add_ide_support target_name)
  if (NOT TARGET ${target_name})
    message(FATAL_ERROR "No target defined with name ${target_name}, cannot target_add_ide_support it.")
  endif()

  set (target_for_ide "${target_name}_ide_support")
  if (NOT TARGET ${target_for_ide})
      file(GLOB_RECURSE target_for_ide_srcs "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx")
      add_executable(${target_for_ide} ${target_for_ide_srcs})
      set_target_properties(${target_for_ide} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
  endif()

  get_target_property(dirs ${target_name} INCLUDE_DIRECTORIES)
  target_include_directories(${target_for_ide} PRIVATE ${dirs})

endfunction(target_add_ide_support)

L'utilisation est ensuite utilisée pour toutes les cibles dans CMakeLists, ajoutez l'appel suivant (peut être effectué dans le fichier CMakeLists.txt situé en haut après tout add_subdirectory:

include(add_ide_support.cmake)
target_add_ide_support(some-target)
2
daminetreg

Vous pouvez essayer CMakeProjectManager2 . Code pour afficher tous les fichiers déjà propagés en amont comme preuve de concept. Le concept est appliqué mais le code ne peut pas être appliqué tel quel pour certaines raisons. Donc, simple fonctionnalité d'attente en amont.

1
Monah Tuk

Il y a un rapport de bogue fermé sur ce problème: Le projet CMake ne montre aucun fichier .

Dans ce cas particulier, le problème concernait le générateur choisi, Ninja, qui n'est pas bien pris en charge par QtCreator.

Veuillez changer cela en "CodeBlocks - Ninja". Le créateur a besoin du générateur supplémentaire CodeBlocks.

Vous devriez voir un avertissement à ce sujet lors du survol du kit (et le kit devrait avoir une icône d'avertissement devant son nom).

Utiliser CodeBlocks - Ninja l’a résolu pour moi aussi. 

Globalement, il peut être utile d’essayer quelques générateurs ...

0
AntonyG