La norme MACRO prédéfinie __FICHIER__ disponible en C montre le chemin complet vers le fichier. Est-il un moyen de court-circuiter le chemin? Je veux dire au lieu de
/full/path/to/file.c
Je vois
to/file.c
ou
file.c
La norme MACRO prédéfinie __FICHIER__ disponible en C montre le chemin complet vers le fichier. Est-il un moyen de court-circuiter le chemin? Je veux dire au lieu de
/full/path/to/file.c
Je vois
to/file.c
ou
file.c
Voici une astuce si vous êtes en utilisant cmake. De: http://public.kitware.com/pipermail/cmake/2013-January/053117.html
Je suis de la copie de la pointe donc tout est sur cette page:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst
${CMAKE_SOURCE_DIR}/,,$(abspath $<))\"'")
Si vous utilisez GNU make, je ne vois aucune raison que vous ne pouvait pas étendre cette mesure à votre propre makefiles. Par exemple, vous pourriez avoir une ligne comme ceci:
CXX_FLAGS+=-D__FILENAME__='\"$(subst $(SOURCE_PREFIX)/,,$(abspath $<))\"'"
où $(SOURCE_PREFIX)
est le préfixe que vous souhaitez supprimer.
Ensuite, utilisez __FILENAME__
à la place de __FILE__
.
Une légère variation sur ce @red1ynx proposé pourrait être de créer la macro suivante:
#define SET_THIS_FILE_NAME() \
static const char* const THIS_FILE_NAME = \
strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__;
Dans chacune de vos .c(pp) des fichiers à ajouter:
SET_THIS_FILE_NAME();
Alors vous pouvez vous référer THIS_FILE_NAME
au lieu de __FILE__
:
printf("%s\n", THIS_FILE_NAME);
Cela signifie que la construction est effectuée une fois par .c(pp) fichier au lieu de chaque fois que la macro est référencé.
Il est limité à l'utilisation de seulement de .c(pp) des fichiers et serait inutilisable à partir de fichiers d'en-tête.
Puisque vous utilisez GCC, vous pouvez profiter de
__BASE_FILE__
Cette macro se développe pour le nom de la principale entrée de fichier, sous la forme d'une chaîne C constante. C'est le fichier source qui a été spécifié sur la ligne de commande du préprocesseur ou compilateur C
et de contrôler la manière dont vous souhaitez afficher le nom de fichier en modifiant le fichier source de la représentation (chemin d'accès complet/chemin relatif/basename) au moment de la compilation.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.