C++ 如何在C++;-Linux
我希望能够获取当前源文件路径C++ 如何在C++;-Linux,c++,C++,我希望能够获取当前源文件路径 string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt"; inFile.open(txt_file .c_str()); 有没有办法获取当前的文件路径? 我不是指可执行路径。我指的是运行代码的源文件的当前位置 非常感谢, Giora.用于编译源文件的路径可以通过标准C宏\uuuuu file\uuuu访问(请参阅) 如果将绝对路径作为编译器的输入(至少对于gcc而言)\uuuuu FILE\
string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt";
inFile.open(txt_file .c_str());
有没有办法获取当前的文件路径?
我不是指可执行路径。我指的是运行代码的源文件的当前位置
非常感谢,
Giora.用于编译源文件的路径可以通过标准C宏
\uuuuu file\uuuu
访问(请参阅)
如果将绝对路径作为编译器的输入(至少对于gcc而言)\uuuuu FILE\uuuu
将保留文件的绝对路径,反之亦然。其他编译器可能略有不同
如果您正在使用GNU Make,并且在变量source\u files
中列出了源文件,如下所示:
SOURCE_FILES := src/file1.cpp src/file2.cpp ...
您可以确保文件由其绝对路径给定,如下所示:
SOURCE_FILES := $(abspath src/file1.cpp src/file2.cpp ...)
C++20
源位置::文件名
除了\uuu文件
,我们现在还有另一种方法,不用使用旧的C预处理器:
文件只是说:
constexpr const char*文件名()const noexcept
5返回:表示的当前源文件(14.2)的假定名称
将此对象作为NTB
其中,NTBS表示“以Null结尾的字节字符串”
当对GCC的支持到达时,我会尝试一下,带有g++-9-std=c++2a的GCC 9.1.0仍然不支持它
索赔用途如下:
#include <iostream>
#include <string_view>
#include <source_location>
void log(std::string_view message,
const std::source_location& location std::source_location::current()
) {
std::cout << "info:"
<< location.file_name() << ":"
<< location.line() << ":"
<< location.function_name() << " "
<< message << '\n';
}
int main() {
log("Hello world!");
}
你的要求似乎不清楚。当前工作目录由getcwd()
给出,源文件的路径可以通过\uuuuuu file\uuuuuu
宏访问。您询问模块意味着可执行文件,因此您需要工作目录。这是它的答案可能是:模块不正确。我想要源文件的路径。文件正在为我提供相对路径。我想要完整的路径。对于Windows,请参阅;对于Linux/OSX,请参阅。答案是使用realpath()函数。我已经试过了,但它需要一个相对路径来开始。我没有。我对源文件位置“一无所知”。
info:main.cpp:16:main Hello world!