J'ai un projet de cmake avec ces dossiers pertinents: mon cmake dans cmake sous Mon projet construit pleinement, mais lorsque j'essaie d'inclure mon fichier d'en-tête dans project_folder code> comprend: p>
périphériques code> incluent: p>
src code>: p>
Main.c code> i get: p>
project_folder/peripherals/something.h:No such file or directory
3 Réponses :
Vous devrez définir exécutable et "lien" avec la bibliothèque: alors, vous devez inclure l'en-tête dans main.c code > Correctement - Depuis que vous avez lié une bibliothèque comprenant un répertoire
périphériques code>, vous pouvez maintenant l'inclure directement: p>
Mon Main.c Code> 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) code>. Est-il toujours nécessaire de l'ajouter à nouveau comme un exécutable?
@Tratie comme commenté précédemment, veuillez afficher Tous b> 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 code>) Votre
app code> cible avec la bibliothèque définie dans
périphériques code>. De cette façon, les répertoires publiquement inclus pour la bibliothèque code> code> seront également inclus pour la cible code> de l'application code>, vous permettant d'inclure des en-têtes de ce répertoire comme celui que j'ai décrit ci-dessus.
Votre instruction INCLUS doit être relative au répertoire fourni.
Par conséquent, vous devriez être capable d'écrire: p> Vous pouvez toujours vérifier le contenu d'une variable de cmake en l'imprimant. Dans votre fichier de cmake, vous pouvez écrire: p> Lors de l'exécution de la cmake, vous devez voir le chemin imprimé dans la sortie de la console. P> P> $ {CUKE_CURRENT_SOURCE_DIR} code> est le répertoire de projet (où votre fichier de cumake est). p>
" Par défaut CUKE_CURRENT_SOURCE_DIR est votre répertoire de travail (formulaire sur lequel vous appelez Cumake) i>" ... Ce n'est pas toujours vrai. Peut-être que vous parlez de cmake_source_dir code>?
Vous pouvez soit faire ou p> Dans votre cmake dans "# inclure" ../ périphériques / i2c_test.h " code> dans votre
Project_Folder Code>: P>
#include <peripherals/i2c_test.h>
....
Comment est-ce que les CMAKELIST.TXT IN
SRC CODE> 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 code> même trouvé? Vous manquez-vous un
add_subdirectory (src) code> appel?
@squareskiltles Vous avez raison, j'ai oublié
add_subdirectory (src) code> dans mon CMAKELIST dans
project_folder code>. 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. CODE> J'ai changé des cmAkelistes sous SRC pour avoir juste
cible_link_libraries (app privé périphériques) code>.
@MIKAELH Avant d'avoir commencé à ajouter ces autres fichiers, j'avais
cible_sources (app privé src / Main.c) code>. 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é".