相关疑难解决方法(0)

如何在编译时提取没有路径和后缀的源文件名?

同时使用带有-std = c11的gcc和带有-std = c ++ 14的g ++.

例如,对于一个名为src/dir/Hello.cxx它的文件,它应该扩展为例如:

const char basename[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

要么

const char basename[] = getStaticBasename(__FILE__);
Run Code Online (Sandbox Code Playgroud)

如何getStaticBasename()是一个宏(对于C源)或constexpr函数(对于C++源),其结果为"Hello".

我必须避免__FILE__在运行时拆分字符串,因为路径和后缀不能以任何方式编译到可执行文件中.

解决方案必须不依赖于大型库,例如boost.

因为我没有makefile,所以在我的情况下不能使用这样的解决方案.

有人有解决方案吗?

编辑2015-07-02:

  • 我对如何调用编译器和链接器没有影响(有时通过makefile,有时来自命令行,或某些IDE(Eclipse CDT托管make,Crossworks,Xcode等等).所以解决方案只需要代码.
  • 我的用例是为小型日志记录解决方案提供某种"通用区域标识符".应用程序代码(使用我的记录器)应该只#include <Joe/Logger.h>在后面的调用中,例如LOG_DEBUG(...)我将隐含地使用自动生成的"通用区域标识符".
  • 我目前的解决方案是应用程序代码必须在它放入代码之前声明一个JOE_LOG_FILE_REGION(Hello);(之后#include <Joe/Logger.h>)LOG_DEBUG(...).

c c++ c++11 c11 c++14

23
推荐指数
4
解决办法
1万
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

c++14 ×1

c11 ×1