【问题标题】:C++ project can't read file when building with CMake [duplicate]使用 CMake 构建时 C++ 项目无法读取文件 [重复]
【发布时间】:2020-12-14 18:36:13
【问题描述】:

所以我编写了一个将文件读入字符串的 C++ 项目。

//func to read file into string
std::string readFile( const std::string& fileName )
{
    std::ifstream ifs( fileName );
    return std::string((std::istreambuf_iterator<char>(ifs)),
        (std::istreambuf_iterator<char>()));
}

//func call in main
std::string text = readFile("test.txt");

这是我为此使用的代码。
我正在使用 CLion 编写我的代码。我将标准编译器更改为 clang++。当我直接在 CLion 中运行 main.cpp 时,程序无法读取该文件。没有错误代码,但是当我调试程序时,它说参数文件名的类型不完整。
当我在终端中编译 main.cpp 时使用

clang++ -std=c++14 main.cpp -o histogram

然后运行它,它可以读取文件并且程序正常运行。
为什么它在终端可以工作,而在 CLion 却不行?

【问题讨论】:

  • "当我调试程序时,它说参数 fileName 的类型不完整。" 你的代码中没有显示,但是你 #include &lt;string&gt; 吗?
  • 命令行clang++ -std=c++14 main.cpp -o histogram与源文件相同的目录中创建可执行文件。 CMake (CLion) 在其他目录中创建一个可执行文件。
  • C++ 程序将读取相对于工作目录的文件。将 IDE 中的工作目录设置设置为源目录。

标签: c++ cmake clion clang++


【解决方案1】:

正如 cmets 中所说,CMake 创建了一个输出文件所在的子文件夹。 test.txt 文件位于源文件夹中,因此超出范围。当我将工作目录更改为源文件夹时,程序运行了。
感谢您的快速帮助。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多