CTest解析add_test调用异常:长格式调用被误识别为短格式致测试无法执行
add_test长格式的问题 你遇到的问题是CMake没有正确识别add_test的长格式语法,反而退回到旧的短格式解析逻辑——这通常是因为你的项目设置的最低CMake版本低于3.10(add_test长格式是在3.10版本引入的),哪怕你实际用的是3.24.1,CMake也会以兼容旧版本的模式处理命令。
具体原因
当cmake_minimum_required(VERSION)设置的版本低于3.10时,CMake会禁用3.10及以后新增的语法特性,包括add_test(NAME ... COMMAND ...)的长格式写法。这时它会把第一个参数NAME当作测试名称,第二个参数test1当作要执行的命令,这就直接导致了CTest找不到test1可执行文件的错误。
解决方案
方案1:升级最低CMake版本要求
修改项目根目录下的CMakeLists.txt,把最低版本提高到3.10或更高:
cmake_minimum_required(VERSION 3.10)
这样CMake就会启用现代语法规则,正确识别NAME和COMMAND关键字,你的测试用例就能被正常解析了。
方案2:改用短格式add_test(兼容旧版本)
如果你的项目需要兼容3.10以下的CMake版本,可以直接使用旧的短格式语法,把测试名称放在第一个位置,命令和参数紧随其后:
add_test(test1 python script.py args)
这种写法在所有CMake版本中都能正常工作,CTest会正确把test1当作测试名称,python作为执行命令,script.py args作为命令参数。
方案3:确保启用测试功能
另外,别忘了在调用add_test之前,在CMakeLists.txt中添加enable_testing()命令,这是CTest能够发现并运行测试的必要前提:
enable_testing() add_test(NAME test1 COMMAND python script.py args)
修改完成后,重新运行cmake生成构建文件,再执行ctest,应该就能正常运行你的测试用例了。
内容的提问来源于stack exchange,提问作者ChemiCalChems

