如何在C ++中获取当前源路径 - Linux

时间:2013-12-05 07:42:34

标签: c++

我希望能够获取当前的源文件路径。

string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt";
inFile.open(txt_file .c_str());

有没有办法获得CURRENT_FILE_PATH? 我不是指可执行路径。我的意思是代码运行的源文件的当前位置。

非常感谢, Giora。

2 个答案:

答案 0 :(得分:3)

用于编译源文件的路径可通过标准C宏__FILE__访问(参见http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html

如果给绝对路径作为编译器的输入(至少对于gcc),__FILE__将保存文件的绝对路径,反之亦然。其他编译器可能略有不同。

如果您使用的是GNU Make,并且您在变量SOURCE_FILES中列出了源文件,如下所示:

SOURCE_FILES := src/file1.cpp src/file2.cpp ...

你可以确保文件的绝对路径是这样的:

SOURCE_FILES := $(abspath src/file1.cpp src/file2.cpp ...)

答案 1 :(得分:1)

C ++ 20 source_location::file_name

除了__FILE__之外,我们现在还有另一种方法,而不使用旧的C预处理程序:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1208r5.pdf

文档只是说:

  

constexpr const char * file_name()const noexcept;

     

5返回:表示的当前源文件的假定名称(14.2)   由该对象作为NTBS。

其中NTBS表示“空终止字节字符串”。

当支持到达GCC时,我会尝试一下,带有g++-9 -std=c++2a的GCC 9.1.0仍然不支持。