我使用Visual Studio 2017 RC打开CMake项目,然后我发现工作目录始终是输出目录。
有没有办法将工作目录设置为输出文件目录以外的其他位置?
(因为没有.sln文件,我不能用旧方法设置工作目录)
更新 我不是从CMake脚本调用程序。我在Visual Studio中运行目标程序。我想更改目标程序的工作目录。
答案 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
。
currentDir
。cwd
代替currentDir
。VS_DEBUGGER_WORKING_DIRECTORY
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。这导致......
不知何时会发生这种情况; 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没关系。
注意:我们可以在“输出”窗口中看到构建过程。
注意: 无论我们选择Ninja还是VisualStudio2019,后端构建工具都是相同的MSVC。
但是我们如何使用VS-IDE属性? 只需打开中间步骤.sln,Visual Studio就会自动同步这两个窗口。