0
votes

CUKE: Impossible de trouver mon fichier d'en-tête dans un autre répertoire

J'ai un projet de cmake avec ces dossiers pertinents: xxx pré>

mon cmake dans project_folder code> comprend: p> xxx pré> Mon cumake sous périphériques code> incluent: p> xxx pré>

cmake sous src code>: p> xxx

Mon projet construit pleinement, mais lorsque j'essaie d'inclure mon fichier d'en-tête dans Main.c code> i get: p>

project_folder/peripherals/something.h:No such file or directory


7 commentaires

Comment est-ce que les CMAKELIST.TXT IN SRC ressemblent? Pouvez-vous ajouter tous les cmakelistes que vous avez dans la structure de dossiers?


@Mikaelh vient de mettre à jour avec tous mes fichiers CMAKELIST


Dans ce cas, "APP" doit déjà avoir la convention de "périphériques" gratuitement, pas besoin de spécifier des sous-dossiers. Tout comme vous incluez un fichier dans quelque chose.c, vous devriez être capable de faire la même chose dans Main.c. Avez-vous une erreur lorsque vous n'écrivez que «quelque chose.h» dans Main.c?


Et je ne vois pas la raison de l'utilisation de Target_Sources - vous spécifiez déjà correctement le fichier source (MAIN.C) lorsque vous ajoutez la bibliothèque.


Comment le fichier CMAKE est-il dans src même trouvé? Vous manquez-vous un add_subdirectory (src) appel?


@squareskiltles Vous avez raison, j'ai oublié add_subdirectory (src) dans mon CMAKELIST dans project_folder . Je viens de l'ajouter, mais maintenant chaque fois que j'essaie de construire, je reçois cette erreur: tentative d'ajout de la bibliothèque de liaison "Périphériques" à la "application" cible qui n'est pas intégrée dans ce répertoire. Ceci est autorisé uniquement lorsque la stratégie CMP0079 est définie sur NOUVEAU. J'ai changé des cmAkelistes sous SRC pour avoir juste cible_link_libraries (app privé périphériques) .


@MIKAELH Avant d'avoir commencé à ajouter ces autres fichiers, j'avais cible_sources (app privé src / Main.c) . Et oui en utilisant cette configuration (où les cmAkelistes sous SRC ne sont même pas appelés), je reçois une erreur que lorsque j'essaie d'inclure mon fichier d'en-tête dans Main.c. Cependant, je ne sais pas s'il y a quelque chose de "fondamentalement cassé".


3 Réponses :


1
votes

Vous devrez définir exécutable et "lien" avec la bibliothèque: xxx

alors, vous devez inclure l'en-tête dans main.c Correctement - Depuis que vous avez lié une bibliothèque comprenant un répertoire périphériques , vous pouvez maintenant l'inclure directement: xxx


3 commentaires

Mon Main.c est déjà la cible que je crois, j'ai ceci dans mes cmakelistes pour le projet global: cible_sources (app privé src / main.c) . Est-il toujours nécessaire de l'ajouter à nouveau comme un exécutable?


@Tratie comme commenté précédemment, veuillez afficher Tous du code CUPAKE concerné dans votre post-question. Sans voir cela, nous devinons vraiment seulement au problème ...


@Tratie Non, vous n'avez pas à redéfinir / ajoutez une autre cible. Le point est, vous devez vous lier (comme dans cible_link_libraires ) Votre app cible avec la bibliothèque définie dans périphériques . De cette façon, les répertoires publiquement inclus pour la bibliothèque seront également inclus pour la cible de l'application , vous permettant d'inclure des en-têtes de ce répertoire comme celui que j'ai décrit ci-dessus.



0
votes

Votre instruction INCLUS doit être relative au répertoire fourni.

EDIT: dans votre exemple $ {CUKE_CURRENT_SOURCE_DIR} est le répertoire de projet (où votre fichier de cumake est).

Par conséquent, vous devriez être capable d'écrire: xxx

Vous pouvez toujours vérifier le contenu d'une variable de cmake en l'imprimant. Dans votre fichier de cmake, vous pouvez écrire: xxx

Lors de l'exécution de la cmake, vous devez voir le chemin imprimé dans la sortie de la console.


1 commentaires

" Par défaut CUKE_CURRENT_SOURCE_DIR est votre répertoire de travail (formulaire sur lequel vous appelez Cumake) " ... Ce n'est pas toujours vrai. Peut-être que vous parlez de cmake_source_dir ?



2
votes

Vous pouvez soit faire "# inclure" ../ périphériques / i2c_test.h " code> dans votre main.cpp strong>

ou p>

Dans votre cmake dans Project_Folder Code>: P>

#include <peripherals/i2c_test.h>
....


0 commentaires