2017-10-14 1 views
0

Lors de la conception de mes CMakeLists, je lance souvent dans ce genre d'erreur:« Impossible de trouver le fichier source »: Debug où CMake l'a cherché

Cannot find source file: 

    foo.hpp 

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp 
.hxx .in .txx 

Pour déboguer thoses questions, je voudrais vraiment savoir où CMake cherché ce fichier!

Je peux trouver quelques questions à ce sujet, mais elles sont toujours spécifiques à un projet donné, pas une solution de débogage à usage général.

+0

C'est toujours si spécifique car vous devez littéralement spécifier où CMake doit rechercher vos fichiers source. –

+0

oui mais il doit y avoir sth comme "imprime la liste des répertoires où à ce moment vous avez cherché des fichiers" pour que je puisse voir lequel manque. – Lithy

Répondre

0

Lorsque vous passez file.hpp à add_executable() ou add_library() commande, CMake recherche dans le fichier:

  • sous le répertoire source de courant (CMAKE_CURRENT_SOURCE_DIR),
  • sous le répertoire binaire actuel (CMAKE_CURRENT_BINARY_DIR).

En outre, CMake est capable de détecter, si le fichier donné est généré au moyen de add_custom_command() commande dans le fichier CMakeLists.txt en cours (qui est, le fichier n'existe pas encore, mais il sera créé à build étape d'une manière connue par CMake).

+0

Ce message d'erreur peut aussi apparaître lors de l'appel 'target_link_libraries' par exemple, dans Dans ce cas, je suppose qu'il le cherche dans certains répertoires spécifiés par la bibliothèque, etc. Comment puis-je être sûr d'avoir la liste complète des répertoires? N'y a-t-il pas un drapeau de débogage à cmake pour l'obtenir? – Lithy

+0

Si je me souviens bien, le type du message que vous avez cité ne se produit pas avec 'target_link_libraries'. Avec cet appel, vous pouvez obtenir le message 'can not find -l..', qui est généré par l'éditeur de liens à l'étape ** build **. – Tsyvarev

+0

La dernière fois que j'ai rencontré cette erreur, c'était parce que je liais une bibliothèque d'interface dont la target_source était définie par un chemin relatif au lieu de absolute. "foo.cpp" n'était même pas présent dans ma commande add_executable, seulement dans l'appel à target_source dans les CMakeLists de la bibliothèque. – Lithy