我正在使用CMake构建我的应用程序并启动其测试。
我的一个测试必须获取一些资源(比如,它创建一个文件),因此它需要在完成后释放资源。 我的问题是,当测试失败时,资源不会被释放。
我的cmake命令基本上是这样的:
add_custom_target(acquire_test_release
COMMAND acquire_resource
COMMAND perform_test.py
COMMAND cleanup_resource
)
每当perform_test.py
返回非零值时,都不会调用cleanup_resource
。
我的问题如下: 即使我的测试失败,我如何执行清理操作,同时保留测试中的失败条件和错误代码(目标应该仍然失败)?
我尝试将我的测试放在||
(例如COMMAND perform_test.py || true
)中,但是当我模糊目标时,我失去了返回码和失败条件。
答案 0 :(得分:1)
在具体案例中,您可以使用
作为快速解决方法COMMAND perform_test.py || ( cleanup_resource && false )
在这种情况下,您将丢失perform_test.py
返回的预设代码(仅剩零/非零分区)。
但是编写脚本 (shell / python / whatever)更好,它实现了运行场景的正确测试。然后,您可以使用给定的脚本和一个 COMMAND 选项。
如果关注构建操作(与配置操作相反),则CMake 不适用于常规脚本 。并且执行一系列COMMAND
选项直到失败是CMake提供的最多。
请记住:CMake本身并不执行构建,此功能可用于其他构建工具。即使在Makefile'收据很难实现条件逻辑,但CMake倾向于支持多种构建工具。
但是,CMake 脚本模式(cmake -P
)相对丰富。如果你想要没有像python这样的额外先决条件的跨平台测试运行场景,你可以轻松地在CMake上编写脚本。