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
相关产品推荐
相关产品推荐

