问题描述
我只想通过std::filesystem::path::current_path
(编译器为emcc
this one)打印当前路径及其内容。下面的一些代码:
//... some stuff ...
namespace fs =
#if defined(_MSC_VER) || defined(_WIN32)
std::filesystem;
#else
std::__fs::filesystem;
#endif
//... some stuff ...
cfg::Config::Config() { this->Path = fs::current_path(); }
void cfg::Config::getPath()
{
for (auto &p : fs::directory_iterator(this->Path)) std::cout << p.path() << '\n';
}
对于Windows来说,它工作正常,输出如下:
...
"D:\\GitHub\\Emscripten_OpenGL\\build\\cmake_install.cmake"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Debug"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.dir"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.sln"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj.filters"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj.user"
...
但是,无论是对于Linux子系统还是带有Ubuntu映像的docker容器,它仅会打印根目录:
application_1 | [100%] Built target Emscripten_Graphics
application_1 | make: make
application_1 | "/tmp"
application_1 | "/home"
application_1 | "/dev"
application_1 | "/proc"
我是否可能因为Linux的std::filesystem
而错过了某些东西?
解决方法
我找到了一个解决方案,所以它可能对其他人有用。感谢@Sugar,我在Emscripten Filesystem API挖了。 Emscripten创建自己的虚拟文件系统,并在那里上传c ++代码中使用的文件。根据{{3}}的解决方法是在编译时将-s NODERAWFS=1
添加为标志。