Вы можете добавить следующую опцию макроса в строку компиляции (может быть легко изменено для вашей среды)
%.o: %.cpp
$(CC) $(CFLAGS) -D__ABSFILE__='"$(realpath $<)"' -c $< -o $@
тогда вам просто нужно иметь этот полный путь:
#include <stdio.h>
int main()
{
printf(__ABSFILE__);
// will be expanded as: printf("/tmp/foo.c")
}
EDIT
Даже лучше, чем это: достаточно следующих правил !!!
%.o: %.cpp
$(CC) $(CFLAGS) -c $(realpath $<) -o $@
И теперь вы можете использовать __FILE__
макрос:
#include <stdio.h>
int main()
{
printf(__FILE__);
// will be expanded as: printf("/tmp/foo.c")
}