CMake/CTest:是否可以将构建目标的创建作为测试使用?

3
我有一个程序,可以读取文件格式的描述(对于好奇的人,是ISO 10303-11),并生成C++代码。生成的代码被编译成库,然后将该库与各种可执行文件链接以读/写该文件格式。
我已经设置了CMake来构建生成器程序,并在配置时为指定的任何文件格式生成库。
现在,我想添加测试。这些测试与构建过程中已经完成的步骤相同 - 我必须在CTest脚本中重新执行这些步骤,或者有没有一种方法告诉CTest构建目标并捕获任何错误消息?
2个回答

3
如果您正在使用足够新的版本的ctest(最近的官方版本是2.8.6),那么您可以使用add_test的NAME/COMMAND签名,结合cmake --build命令行选项,在构建树中构建特定的目标。
例如,以下内容应该有效,假设存在一个名为“tgt1”的自定义目标(或库或可执行文件目标):
add_test(NAME test.build.tgt1
  WORKING_DIRECTORY ${CMAKE_BINARY_DIRECTORY}
  COMMAND ${CMAKE_COMMAND} --build . --target tgt1 --config $<CONFIGURATION>
)

这个功能可以跨平台,在任何地方使用相同的语法。它甚至可以与多配置生成器一起使用,比如Visual Studio和Xcode。


谢谢您,这使得跨平台支持比我想象的更容易。例如,我使用了set_target_propertiesset_test_propertiesset_target_properties( ${target} PROPERTIES EXCLUDE_FROM_ALL ON )set_tests_properties( build_${PROJECT_NAME} PROPERTIES DEPENDS generate_${SCHEMA_SHORT_NAME} LABELS schema_build )。我还为其他需要类似功能的人创建了一个github gist,其中包含可工作的代码。 - Mark

0
你尝试过在你的CMakeLists.txt文件中使用enable_testing(),然后调用add_test()来创建一个测试目标吗?如果你遵循CMake文档,我认为你可以在一个统一的构建脚本中完成所有操作。

是的,我都用过。我的问题在于如何让 ctest 进行部分构建,然后运行测试。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接