You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake测试中WORKING_DIRECTORY未生效,求助排查原因

解决CMake测试WORKING_DIRECTORY不生效的问题

你的核心问题是**add_test语法使用错误**,导致WORKING_DIRECTORY被误当作测试命令的参数,而非测试的属性配置。

正确写法1:使用关键字版add_test语法

将测试定义改为关键字形式,明确指定各属性:

cmake_minimum_required(VERSION 3.24)
set (CMAKE_CXX_STANDARD 17)

project(working_directory_error LANGUAGES CXX)
enable_testing()

add_executable(main main.cpp)

# 关键字形式指定测试名称、命令和工作目录
add_test(NAME main_test
         COMMAND main
         WORKING_DIRECTORY "C:/")

正确写法2:用set_tests_properties补设工作目录

如果偏好简化版add_test,可以单独通过属性设置命令补加工作目录:

cmake_minimum_required(VERSION 3.24)
set (CMAKE_CXX_STANDARD 17)

project(working_directory_error LANGUAGES CXX)
enable_testing()

add_executable(main main.cpp)

add_test(main_test main)
# 为已定义的测试设置工作目录属性
set_tests_properties(main_test PROPERTIES WORKING_DIRECTORY "C:/")

原因说明

CMake的add_test支持两种语法:

  • 简化形式:add_test(<test_name> <command> [<arg>...]) —— 所有后续参数都会被视为测试命令的运行参数,无法直接指定WORKING_DIRECTORY这类测试级别的属性。
  • 关键字形式:add_test(NAME <test_name> COMMAND <command> [<arg>...] [WORKING_DIRECTORY <dir>] ...) —— 通过关键字明确区分测试属性与命令参数,才能正确应用工作目录配置。

你之前的写法采用了简化形式,WORKING_DIRECTORY和"C:/"被当成了main程序的启动参数,完全没有起到设置工作目录的作用。

修改后重新执行构建和测试命令,程序的当前工作目录会正确切换到C:/,测试即可通过。

内容的提问来源于stack exchange,提问作者Joshua Maiche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:33:30