如何为 Visual Studio 2017 RC CMake 项目设置工作目录

How to set working directory for Visual Studio 2017 RC CMake Project

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

有什么方法可以将工作目录设置为输出文件目录以外的其他地方吗?

(因为没有.sln文件,老办法无法设置工作目录)

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

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

使用launch.vs.json

根据 this bug report,您可以在 Debug and Launch Settings 中添加设置(右键单击相关 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打开解决方案,因为CMake集成的版本Visual Studio ] 2017年是3.6。这导致...

等到 Visual Studio 与 CMake 一起发布 >= 3.8.0

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

使用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 只是 运行 cmake 命令由 CMakeSettings.json

中的参数

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

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

注意:我们可以在输出中看到构建过程window.

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

但是怎么用VS-IDE属性? 只要打开中间步骤.sln,Visual Studio就会自动同步这两个windows.