如何编写cpp __DIR__宏,类似于__FILE__

Dav*_*dge 7 c++ directory c-preprocessor

__FILE____LINE__宏内置到Ç预处理器,并经常用于打印调试输出与文件名和行号.我需要类似的东西,但只需要路径末尾的目录名称.例如,如果我的代码在:/ home/davidc/some/path/to/some/code/foo/bar我需要一个宏,它只会给我"bar",如果代码在/ home/davidc/some中/ path/to/some/code/foo/bee然后我需要它给我"蜜蜂".

有什么想法吗?(顺便说一下,这是一个C++应用程序).

更新:要清楚,我正在使用一个宏,它将在编译时给我一个包含目录名的字符串,我不想在运行时进行任何字符串处理.

D.S*_*ley 9

如果您使用GNU make来构建项目,那么您可以执行以下操作:

%.o: %.cpp
    $(CC) $(CFLAGS) -D__DIR__="$(strip $(lastword $(subst /, , $(dir $(abspath $<)))))" -c $< -o $@
Run Code Online (Sandbox Code Playgroud)

这必须是我在很长一段时间内在Makefile中做过的最神奇的事情.我不认为你会在编译器的范围内找到一种快速或干净的方法来做到这一点,所以我会寻找巧妙的方法将信息注入编译过程.

祝好运.