我使用Visual Studio 2017 RC打开一个CMake项目,发现工作目录总是输出目录。 是否有办法将工作目录设置为除了输出文件目录之外的其他位置? (因为没有.sln文件,所以我无法像以前一样设置工作目录)。 更新:我不是从CMake脚本调用程序。 我在Visual Studio中运行目标程序,并希望更改目标程序的工作目录。
截至撰写本文(2017年3月23日),目前无法通过CMakeLists.txt设置工作目录。以下是一些解决方法:
launch.vs.json
根据这个错误报告,您可以在调试和启动设置中添加设置(右键单击相关的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
另请参阅:CMake是否提供一种方法来设置给定构建系统运行/调试项目时使用的工作目录?
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。这导致......
目前还不知道这将会在什么时候发生;团队目前正在考虑升级到CMake 3.7,所以还需要一段时间。但是当这个版本发布时,很可能会支持 VS_DEBUGGER_WORKING_DIRECTORY
属性。
launch.vs.json
对我有用。(Visual Studio 2017 Community) - FelixVS_DEBUGGER_WORKING_DIRECTORY
。因此,launch.vs.json
仍是唯一的选择! - tower120例如,使用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没有生效的原因是:cmake
命令。
如果我们选择了ninja
,它不会生成.sln和.vcproj文件,只使用build.ninja来驱动构建过程。Visual Studio 2019
,它会生成一个.sln文件和一些.vcproj文件,但这些文件只是构建的中间步骤。当前的VS-IDE窗口不会加载这些文件,只使用命令行来利用vcproj/sln文件进行构建。VS_DEBUGGER_WORKING_DIRECTORY
会保存在这些中间步骤的.vcproj文件中,在当前IDE窗口中是看不到的。(请记住:当前IDE窗口只是CMakeLists.txt的文本编辑器)
add_custom_target()
调用中运行程序,可以为其指定 WORKING_DIRECTORY 选项。 - Tsyvarev