从Visual Studio迁移到CMake后,如何设置调试当前工作目录?
解决CMake构建调试时工作目录或资源文件路径问题
方案一:设置调试工作目录与源码目录一致
在CMakeLists.txt中,为你的可执行目标添加Visual Studio专属的调试工作目录属性,强制调试时的工作目录与原VS解决方案保持一致(即源码根目录$myproject)。
在定义可执行目标后,添加以下配置:
add_executable(YourTargetName main.c) # 将Visual Studio调试工作目录设为项目源码根目录 set_target_properties(YourTargetName PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" )
PROJECT_SOURCE_DIR会自动指向你调用project()命令所在的目录,完美匹配原VS调试的工作目录。
方案二:将资源文件复制到构建调试目录
如果不想修改工作目录,可以在构建流程中自动将ini、txt等资源文件同步到调试输出目录,两种常用实现方式如下:
方式1:使用configure_file(单文件快速配置)
针对每个资源文件,用configure_file直接复制,添加COPYONLY参数避免编译文件内容:
# 复制ini文件到构建目录 configure_file( "${PROJECT_SOURCE_DIR}/config.ini" "${CMAKE_CURRENT_BINARY_DIR}/config.ini" COPYONLY ) # 复制txt文件到构建目录 configure_file( "${PROJECT_SOURCE_DIR}/data.txt" "${CMAKE_CURRENT_BINARY_DIR}/data.txt" COPYONLY )
CMAKE_CURRENT_BINARY_DIR对应当前目标的构建目录(如$myproject\x64\Debug),调试时程序能直接在工作目录找到资源。
方式2:使用add_custom_command(批量文件同步)
如果有多个资源文件,用自定义命令实现批量同步,且仅在源文件修改时复制:
# 列出所有需要同步的资源文件 set(RESOURCE_FILES "${PROJECT_SOURCE_DIR}/config.ini" "${PROJECT_SOURCE_DIR}/data.txt" ) # 在目标构建前执行资源文件同步 add_custom_command( TARGET YourTargetName PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RESOURCE_FILES} "${CMAKE_CURRENT_BINARY_DIR}" )
内容的提问来源于stack exchange,提问作者Lord Yggdrasill
相关产品推荐
相关产品推荐

