我希望能够获取当前的源文件路径。
string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt";
inFile.open(txt_file .c_str());
有没有办法获得CURRENT_FILE_PATH? 我不是指可执行路径。我的意思是代码运行的源文件的当前位置。
非常感谢, Giora。
答案 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仍然不支持。