断言宏中的C / C ++完整文件路径

时间:2010-03-15 18:40:41

标签: c++ c file path assert

我想知道是否可以使用断言宏显示完整的文件路径? 我无法在编译命令中指定完整文件路径,还有办法吗?

我的调试环境是linux / g ++

2 个答案:

答案 0 :(得分:4)

您可以将以下宏选项添加到编译行中(可以根据您的环境轻松修改)

%.o: %.cpp
    $(CC) $(CFLAGS) -D__ABSFILE__='"$(realpath $<)"' -c $< -o $@

然后你只需要这个就可以得到完整的路径:

#include <stdio.h>
int main()
{
  printf(__ABSFILE__);
  // will be expanded as: printf("/tmp/foo.c")
}

修改

甚至比这更好:以下规则就足够了!!!

%.o: %.cpp
    $(CC) $(CFLAGS) -c $(realpath $<) -o $@

现在您可以使用__FILE__宏:

#include <stdio.h>
int main()
{
  printf(__FILE__);
  // will be expanded as: printf("/tmp/foo.c")
}

答案 1 :(得分:0)

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