C / C ++ полный путь к файлу в макросе assert - PullRequest
2 голосов
/ 15 марта 2010

Мне интересно, возможно ли отобразить полный путь к файлу с помощью макроса assert? Я не могу указать полный путь к файлу в команде компиляции, есть ли способ сделать это?

Моя среда отладки - linux / g ++

Ответы [ 2 ]

4 голосов
/ 16 марта 2010

Вы можете добавить следующую опцию макроса в строку компиляции (может быть легко изменено для вашей среды)

%.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")
}
0 голосов
/ 15 марта 2010

assert использует макрос __FILE__ для получения имени файла. Он будет расширен до пути, используемого во время компиляции. Например, используя эту программу:

#include <stdio.h>
int main(void)
{
    printf("%s\n", __FILE__);
    return 0;
}

Если я скомпилирую с помощью 'gcc -o foo foo.c' и запустлю, я получу такой вывод:

foo.c

Но если я скомпилирую с помощью 'gcc -o foo /tmp/foo.c' и запустлю, я получу вместо этого вывод:

/tmp/foo.c
...