c++ - 我如何编写一个类似于 __FILE__ 的 cpp __DIR__ 宏

标签 c++ directory c-preprocessor

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

有什么想法吗? (顺便说一句,这是针对 C++ 应用程序的)。

更新:明确地说,我正在寻找一个宏,它会在编译时给我一个包含目录名称的字符串,我不想在运行时进行任何字符串处理。

最佳答案

如果您正在使用 GNU make 来构建您的项目,那么您也许可以这样做:

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

这一定是我很长一段时间以来一直想在 Makefile 中做的最可怕的事情。我不认为您会在编译器的范围内找到一种快速或干净的方法来执行此操作,因此我会寻找巧妙的方法将信息注入(inject)编译过程。

祝你好运。

关于c++ - 我如何编写一个类似于 __FILE__ 的 cpp __DIR__ 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591873/

相关文章:

c++ - 构造函数初始化列表和 const 变量

c++ - 如何使用 STL 在 C++ 中最小化所有打开的窗口

C预处理器: building a path string

C# 将一个目录与另一个目录合并

c - 有没有办法检测,C 文件被直接编译成可执行文件?

C语言中Sizeof运算符的复杂声明

c++ - C++中巨大图的数据结构

c++ - 如何在 debian 下正确链接 opengl 程序?

c++ - header 或添加到代码中以检测文件夹是否存在的内容

java - 打印目录中多个文件的所有内容