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

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

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

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

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

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

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

编辑

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

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

你现在可以使用__FILE__宏:

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

assert使用__FILE__宏来获取文件名。 它将扩展到编译期间使用的路径。 例如,使用此程序:

 #include  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