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

cuxqih21  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(83)

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

project_name/CMakeLists.txt
project_name/src
project_name/resources
...
project_name-build/configuration_name/project_name.exe

我希望我的应用程序在项目根目录project_name中运行,这样它就可以直接访问resources
CMake是否提供了指定此属性的方法,或者我必须在使用的每个构建环境中手动设置它?
我在文档中找了找,除了setting up a post-build event to run my project from the desired directory的可能性之外没有发现任何东西,这是不太理想的。我还发现了the working directory setting for Visual Studio is saved in a per-user file (.vcxproj.user),我不相信CMake会生成它(这表明答案可能是否定的)。

atmip9wb

atmip9wb1#

从CMake 3.8开始,提供了VS_DEBUGGER_WORKING_DIRECTORY target属性,可让您在Visual Studio中设定目的的调试工具工作目录。
用法示例:

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

w80xi6nr2#

正如drescherjm指出的那样(在他对这个问题的评论中),CMake没有提供直接设置工作目录的方法,但是,CMake提供了间接设置工作目录的方法。
我想我会走的路是use the configure_file command to fill in a template .user file

wztqucjr

wztqucjr3#

下面是一个更简单的解决方案。将其粘贴到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>")

它会覆写目前项目的预设vcxproj.user档案,并根据两柴的需要,指定$(OutDir)做为工作目录。请确定$PROJECT_NAME是您的项目名称。

相关问题