CMake是否提供了一种方法来设置运行/调试项目时要使用的给定生成系统的工作目录?

CMake是否提供了一种方法来设置运行/调试项目时要使用的给定生成系统的工作目录?,cmake,working-directory,Cmake,Working Directory,我有一个具有以下结构的项目: project_name/CMakeLists.txt project_name/src project_name/resources ... project_name-build/configuration_name/project_name.exe 我希望我的应用程序在根项目目录project\u name中运行,这样它就可以直接访问资源 CMake是否提供了指定此属性的方法,或者我必须在使用的每个生成环境中手动设置它 我在文档中查找了一下,没有发现任何不太理

我有一个具有以下结构的项目:

project_name/CMakeLists.txt
project_name/src
project_name/resources
...
project_name-build/configuration_name/project_name.exe
我希望我的应用程序在根项目目录
project\u name
中运行,这样它就可以直接访问
资源

CMake是否提供了指定此属性的方法,或者我必须在使用的每个生成环境中手动设置它

我在文档中查找了一下,没有发现任何不太理想的可能性。我还发现了我不相信CMake生成的(这表明答案可能是否定的)。

正如drescherjm指出的(在他对这个问题的评论中),CMake没有提供直接设置工作目录的方法。然而,CMake确实提供了间接的方法


我想我要走的道路是。

这里有一个更简单的解决方案。 将此粘贴到您的cmake末尾:

file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.vcxproj.user" 
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>     \
    <Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">
        <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
    </PropertyGroup>
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">
        <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
    </PropertyGroup>
    </Project>")
文件(写入“${CMAKE\u CURRENT\u BINARY\u DIR}/${PROJECT\u NAME}.vcxproj.user”
"     \
$(OutDir)
WindowsLocalDebugger
$(OutDir)
WindowsLocalDebugger
")

它将覆盖当前项目的默认vcxproj.user文件,并根据调试需要为工作目录指定$(OutDir)。确保$PROJECT\u NAME是您的项目名称。

自CMake 3.8以来,存在target属性,该属性允许您在Visual Studio中为目标设置调试器工作目录

用法示例:

set_property(TARGET MyTarget PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")

CMake不生成.user文件,但它使您能够自己构建自己的CMake脚本,使用CMake命令编写文件并操作字符串。很好的发现!不确定为什么CMake选择使属性VS特定:它可以应用于其他IDE。@我提交的Dipir用于跟踪您提出的问题。感谢您提出的问题。我想我得到了他们的逻辑:QtCreator、KDevelop等可能使用单独的项目文件,而VS硬编码.vcxproj文件中的调试器工作目录为
LocalDebuggerWorkingDirectory
。。。每次重新生成时都会被覆盖。我会在那里散散步。我仍然认为这可能是有意义的,不那么具体,所以它也可以被其他IDE的未来生成器使用。我可以用“MyTarget”来替换什么,以便为我的所有目标设置工作目录?