【问题标题】:How to set working directory for Visual Studio 2017 RC CMake Project如何为 Visual Studio 2017 RC CMake 项目设置工作目录
【发布时间】:2017-06-11 09:08:49
【问题描述】:

我使用 Visual Studio 2017 RC 打开一个 CMake 项目,然后我发现工作目录始终是输出目录。

有没有办法将工作目录设置到输出文件目录以外的地方?

(因为没有.sln文件,不能用老方法设置工作目录)

更新 我不是从 CMake 脚本调用程序。我在 Visual Studio 中运行目标程序。我想更改目标程序的工作目录。

【问题讨论】:

  • 出于什么目的您要更改工作目录?如果您在 add_custom_target() 调用中运行程序,您可以为其指定 WORKING_DIRECTORY 选项。
  • @Tsyvarev 我想更改输出程序的工作目录,以便可以在不同配置(调试/发布)之间共享某些资源(例如图像)。
  • I want to change the working directory of the output program - 请提供代码如何从 CMake 脚本调用此程序。 (在问题帖子中本身,而不是在评论中这样做)。顺便说一句,build directory (CMAKE_BINARY_DIR) 对于所有配置都是相同的。在依赖于配置的目​​录中创建了几个人工制品(如库和可执行文件)。
  • @Tsyvarev 你可能误解了我的意思。 我没有从 CMake 脚本调用程序。 我正在 Visual Studio 中运行目标程序。我认为它分别运行 CMake 脚本和目标程序。我想更改目标程序的工作目录。
  • 嗯,这解释了很多。 I am running the target program in Visual Studio.And I want to change the working directory for the target program. - 请将其添加到问题帖本身,这样您的问题无需阅读 cmets 即可清楚。

标签: visual-studio cmake visual-studio-2017


【解决方案1】:

截至写作 (2017-03-23),无法通过 CMakeLists.txt 设置工作目录。以下是一些解决方法:

使用launch.vs.json

根据this bug report,您可以在调试和启动设置中添加设置(右键单击相关的CMakeLists.txt)。这将打开launch.vs.json 文件,您可以在其中使用currentDir 变量添加工作目录。这是一个例子:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "path\\to\\target",
      "name": "My Awesome Project",
      "currentDir": "${workspaceRoot}/src"
    }
  ]
}

如果您愿意,可以继续签入该文件;它可能位于.vs/launch.vs.json

使用 CMake >= 3.8.0 和 VS_DEBUGGER_WORKING_DIRECTORY

另请参阅:Does CMake offer a method to set the working directory for a given build system to use when running/debugging the project?

VS_DEBUGGER_WORKING_DIRECTORY 是版本 3.8.0 中的新 CMake 目标属性。设置如下:

set_target_properties(
    MyProject PROPERTIES
    VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")

您需要使用旧的独立CMake方法,生成.sln/.vcxproj文件,用Visual Studio打开解决方案,因为与Visual Studio 2017集成的CMake版本是3.6。这导致...

等到 Visual Studio 附带 CMake >= 3.8.0

不知道什么时候会发生; the team are currently looking at updating to CMake 3.7 所以会再等一段时间。但是,当这种情况发生时,它可能会支持 VS_DEBUGGER_WORKING_DIRECTORY 属性。

【讨论】:

  • 编辑launch.vs.json为我工作。 (Visual Studio 2017 社区)
  • Visual Studio 2017 15.6.1 现在支持 cmake >= 3.8,但它仍然 VS_DEBUGGER_WORKING_DIRECTORY 不知道。 launch.vs.json 仍然是唯一的选择!
  • 对于那些使用 VS 为远程系统(例如 Ubuntu 18.04)构建 cmake 的人来说,VS_DEBUGGER_WORKING_DIRECTORY 解决方案不起作用,尽管使用的 cmake 版本 >= 3.8.0。您必须使用 launch.vs.json 方法并设置“cwd”字段而不是“currentDir”。还要注意使用正确的宏来替换本地目录。例如。可以使用 ${debugInfo.remoteWorkspaceRoot} 找到远程工作区根。这是使用 VS Community 2017 版本 15.9.16 测试的。
【解决方案2】:

使用currentDir,例如:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "name": "testd.exe (Debug\\testd.exe)",
      "currentDir": "${workspaceRoot}\\app_home",
      "args": [
        "${workspaceRoot}\\app_home"
      ]
    }
  ]
}

VS_DEBUGGER_WORKING_DIRECTORY 不起作用的原因是:
当我们使用 VisualStudio IDE 管理项目时,它只是一个文本编辑器。 例如一个 cmake 项目,IDE 只是通过 CMakeSettings.json 中的参数运行cmake 命令

那么如果我们选择ninja,它不会生成.sln和.vcproj文件,只是使用build.ninja来驱动构建过程。
如果 我们选择Visual Studio 2019,它会生成一个.sln 文件和一些.vcproj 文件,但是这些文件只是构建的中间步骤。当前的 VS-IDE 窗口不会加载这些文件,只需使用命令行来利用 vcproj/sln 文件进行构建。
VS_DEBUGGER_WORKING_DIRECTORY 将保存到这些中间步骤 .vcproj 文件中,当前 IDE 窗口不可见。 (记住:当前的IDE窗口只是一个CMakeLists.txt的文本编辑器)

换句话说,使用 VS-IDE 与 cmake 和 makefile 没有关系。

注意:我们可以在输出窗口中看到构建过程。

注意: 无论我们选择 Ninja 还是 VisualStudio2019,后端构建工具都是一样的,MSVC。

但是我们如何使用 VS-IDE 的属性呢? 只需打开中间步骤 .sln,Visual Studio 就会自动同步这两个窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多