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

时间:2017-01-26 00:44:06

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

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

有没有办法将工作目录设置为输出文件目录以外的其他位置?

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

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

2 个答案:

答案 0 :(得分:10)

截至撰稿时(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属性。

答案 1 :(得分:1)

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

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

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

enter image description here

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

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