断言宏中的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