清除CMake中的错误
我正在使用CMake构建我的应用程序并启动它的测试 我的一个测试必须获取一些资源(比如,它创建了一个文件),因此它需要在完成后释放资源。 我的问题是,当测试失败时,资源不会被释放 我的cmake命令基本上如下所示:清除CMake中的错误,cmake,Cmake,我正在使用CMake构建我的应用程序并启动它的测试 我的一个测试必须获取一些资源(比如,它创建了一个文件),因此它需要在完成后释放资源。 我的问题是,当测试失败时,资源不会被释放 我的cmake命令基本上如下所示: add_custom_target(acquire_test_release COMMAND acquire_resource COMMAND perform_test.py COMMAND cleanup_resource ) 无论何时perform_te
add_custom_target(acquire_test_release
COMMAND acquire_resource
COMMAND perform_test.py
COMMAND cleanup_resource
)
无论何时perform_test.py
返回非零,都不会调用cleanup_资源
我的问题如下:
即使测试失败,如何执行清理操作,同时保留测试中的失败条件和错误代码(目标仍应失败)
我尝试将我的测试放在
|
(例如,命令perform_test.py | | true
)中,但随后我丢失了返回代码和失败条件,同时模糊了目标。在您的具体案例中,作为一种快速解决方法,您可以使用
COMMAND perform_test.py || ( cleanup_resource && false )
在这种情况下,您将丢失perform_test.py
返回的预大小代码(只保留零/非零除法)
但是编写一个脚本(shell/python/whatever)更好,它实现了运行场景的正确测试。然后,您可以将给定脚本与单个命令选项一起使用
当关注构建操作时(与配置操作相反),CMake不适合一般脚本编写。CMake提供的最多选项是执行一系列
命令
选项,直到失败
请记住:CMake本身不执行构建,此功能可用于其他构建工具。即使在Makefile的接收中,也很难实现条件逻辑,但CMake倾向于支持多种构建工具
但是,CMake脚本模式(
CMake-p
)相对丰富。如果您希望跨平台测试运行场景不需要python等附加先决条件,您可以轻松地在CMake上编写脚本。在具体情况下,您可以使用命令perform_test.py|(cleanup_resource&&false)
。但是最好创建一个脚本(shell/python/which),它实现正在运行的测试,并使用命令选项调用该脚本。CMake不适合使用返回代码和条件的常规脚本。谢谢。您的解决方案会起作用,尽管我会丢失perform_test.py
的精确返回代码?那么,执行所有三个操作(获取、测试、发布)并返回测试操作返回代码的脚本似乎是强制性的?我觉得很遗憾,CMake不能更好地控制目标的完成……你可以删除测试的输出文件夹。这将触发重新配置和重建,但可能已经足够好了。@usr1234567请澄清,删除测试的输出文件夹不是我的具体情况,只是几种情况中的一个示例。我对使用CMake解决故障清理问题的通用解决方案感兴趣。Tsyvarev建议CMake不能在本地完成这项工作,使用脚本是可以接受的答案。