Если вы используете программу make, вы должны иметь возможность предварительно разобрать имя файла и передать его как макрос в gcc для использования в вашей программе.
В вашем make-файле измените строку:
file.o: file.c
gcc -c -o file.o src/file.c
до:
file.o: src/file.c
gcc "-D__MYFILE__=\"`basename $<`\"" -c -o file.o src/file.c
Это позволит вам использовать __MYFILE__
в вашем коде вместо __FILE__
.
Использование базового имени исходного файла ($ <) означает, что вы можете использовать его в обобщенных правилах, таких как ".c.o". </p>
Следующий код иллюстрирует, как это работает.
Файл makefile:
mainprog: main.o makefile
gcc -o mainprog main.o
main.o: src/main.c makefile
gcc "-D__MYFILE__=\"`basename $<`\"" -c -o main.o src/main.c
Файл src / main.c:
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("file = %s\n", __MYFILE__);
return 0;
}
Бег из снаряда:
pax@pax-desktop:~$ mainprog
file = main.c
pax@pax-desktop:~$
Обратите внимание на строку "file =", которая содержит только базовое имя файла, а не dirname.