如何使用cmake在Visual Studio中使相对文件路径工作?

时间:2017-11-10 23:02:04

标签: c++ visual-studio cmake

我们正在使用CMake开发一个c ++项目。在项目中,我们使用resources/file.txt类引用一些资源文件,如std::ifstream(直接位于项目文件夹中)。现在的问题是,虽然我们的其他团队成员可以在使用Linux时引用这些文件,但我不能(我使用的是Visual Studio 2017)。

如何设置CMake或Visual Studio,以便我可以在不更改路径的情况下引用这些文件?我仍然是一个使用CMake的新手,但我找不到任何有用的东西。

编辑:
显示问题的最小代码:

#include <iostream>
#include <fstream>
#include <string>

std::string read_file(std::string filename)
{
    std::string result = "";

    std::ifstream file(filename);
    if (!file.is_open())
    {
        std::cout << "Could not open file " << filename.c_str() << "." << std::endl;
        return result;
    }

    std::string line;
    while (getline(file, line))
        result += line + '\n';
    return result;
}

int main(int argc, char *argv[])
{
    std::string fileContent = read_file("src/Test_File.txt");

    if (fileContent.compare(""))
    {
        std::cout << fileContent.c_str() << std::endl;
    }

    return 0;
}

此程序应加载位于src文件夹内的“Test_File.txt”,文件夹结构为:

  • SRC
    • 的main.cpp
    • CMakeList.txt
    • Test_File.txt
  • CMakeList.txt

这里的问题是程序找不到Text_File.txt而其他团队成员没有这样的问题。绝对的路径当然是有效的,但它们显然不是可行的方法。

我已经尝试使用。设置工作目录 在VS_DEBUGGER_WORKING_DIRECTORY之后set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") add_executable(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp") C:\Program Files\Maple 2017\bin.X86_64_WINDOWS\launch.ini的参数,但似乎也不起作用。

1 个答案:

答案 0 :(得分:0)

经过多次尝试后,感谢@Tsyvarev,我得到了它。作为州in this question they brought up,设置&#34; currentDir&#34;工作。对我来说,它之前没有用,因为"name""projectTarget"设置不当。

我现在在修复"currentDir": "${workspaceRoot}""name"值后添加了"projectTarget",但它确实有效。