清除CMake中的错误

时间:2017-03-21 10:00:32

标签: cmake

我正在使用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)中,但是当我模糊目标时,我失去了返回码和失败条件。

1 个答案:

答案 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上编写脚本。