【问题标题】:cmake/ctest: is it possible to use the creation of build targets as tests?cmake/ctest:是否可以将构建目标的创建用作测试?
【发布时间】:2011-12-07 07:38:13
【问题描述】:

我有一个程序可以读取文件格式的描述(好奇的 ISO 10303-11)并从中生成 c++。生成的代码被编译成一个库,该库与各种可执行文件链接以读取/写入该文件格式。

我已设置 CMake 来构建生成器程序并为配置时指定的任何文件格式生成库。

现在,我想添加测试。这些测试与构建过程中已经完成的步骤相同 - 我必须在 CTest 脚本中重做这些步骤,还是有办法告诉 ctest 构建目标并捕获任何错误消息?

【问题讨论】:

    标签: c++ code-generation cmake ctest


    【解决方案1】:

    如果您使用的是最新版本的 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_properties 和 set_test_properties 一起使用:例如 set_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,其中包含工作代码,供其他需要执行此类操作的人使用。
    【解决方案2】:

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

    【讨论】:

    • 是的,这两个我都用过。我的问题是弄清楚如何让 ctest 进行部分构建然后运行测试。
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多