CMake中为IDE配置可执行文件工作目录的问题(Xcode下CMAKE_XCODE_SCHEME_WORKING_DIRECTORY无效及Visual Studio实现方案咨询)
Xcode平台:为什么CMAKE_XCODE_SCHEME_WORKING_DIRECTORY不生效?
你遇到的问题大概率是混淆了全局CMake变量和目标专属属性的用法,或是配置时机、路径有误。这里分两种场景给出可靠的解决方式:
方式1:针对单个可执行目标配置(推荐)
CMAKE_XCODE_SCHEME_WORKING_DIRECTORY是全局变量,会影响所有后续创建的目标,但如果你只想给exec目录下的可执行文件单独设置工作目录,更精准的方式是直接给目标配置XCODE_SCHEME_WORKING_DIRECTORY属性。
在exec/CMakeLists.txt中,在add_executable语句之后添加以下代码:
add_executable(MyExecutable your_source_files.cpp) # 给当前可执行目标设置Xcode调试工作目录 set_target_properties(MyExecutable PROPERTIES XCODE_SCHEME_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/exec/test" )
注意:这里推荐用
CMAKE_BINARY_DIR(顶层构建目录)而非PROJECT_BINARY_DIR——因为exec子目录的PROJECT_BINARY_DIR指向的是build/exec,而你需要的是build/exec/test,用顶层构建目录能更准确指向目标路径。
方式2:全局配置所有目标
如果你希望所有目标都使用同一个工作目录,需要确保全局变量在所有add_executable/add_library之前设置。比如在顶层CMakeLists.txt的开头:
cmake_minimum_required(VERSION 3.13) # 注意:CMAKE_XCODE_SCHEME_*变量要求CMake 3.13及以上版本 project(YourProjectName) # 全局设置所有目标的Xcode工作目录 set(CMAKE_XCODE_SCHEME_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/exec/test") add_subdirectory(lib) add_subdirectory(exec)
先检查你的CMake版本是否达标,旧版本不支持这个全局变量,这也是很多人设置后不生效的常见原因。
验证配置是否生效
生成Xcode工程后,打开可执行目标的Scheme确认:
- 点击Xcode顶部菜单栏的
Product > Scheme > Edit Scheme - 切换到
Run标签页,选择Options子标签 - 查看
Working Directory是否已更新为你指定的路径
Visual Studio平台:配置调试工作目录
针对Visual Studio,CMake提供了专门的目标属性VS_DEBUGGER_WORKING_DIRECTORY,用法和Xcode类似,同样推荐针对单个目标配置:
在exec/CMakeLists.txt中添加:
add_executable(MyExecutable your_source_files.cpp) # 给当前可执行目标设置VS调试工作目录 set_target_properties(MyExecutable PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/exec/test" )
这个属性会直接写入VS工程的调试配置,启动调试时会自动使用该目录作为工作目录,支持CMake 3.8及以上版本。
如果你的VS版本较旧,也可以通过VS_DEBUGGER_COMMAND_ARGUMENTS间接指定,但VS_DEBUGGER_WORKING_DIRECTORY是更直接、清晰的方式。
内容的提问来源于stack exchange,提问作者Adrien

