c++11 - 如何使用 cmake 测试我的库中的 static_assert?

标签 c++11 cmake automated-tests static-assert

在我的库代码中,我有一堆 static_asserts。我想测试它们是否在预期条件下开火。

我想编写一系列测试文件和

  • 确保它们无法编译
  • 检查来自静态断言的预期消息的编译尝试的输出

  • 有谁知道如何用cmake做到这一点?

    AFAICT,try_compile 不是答案,因为它是在运行 cmake 时执行的。我需要在 make 期间执行这些检查。

    最佳答案

    您可以为这些测试设置一个“嵌套”项目,将其配置为 CMake 运行的一部分,然后使用 cmake --build 构建它。 ;像这样:

    你正常的 CMakeLists.txt:

    # ...
    execute_process(
      COMMAND ${CMAKE_COMMAND} path/to/test/project
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/TestProject
    )
    
    add_test(
      NAME StaticAsserts
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/TestProject
      COMMAND ${CMAKE_COMMAND} --build .
    )
    # ...
    

    当然,测试命令实际上可以是一个运行 cmake --build 的包装脚本。在内部并处理其输出。

    作为替代方案,您也可以将嵌套项目的配置移动到测试中,也许使用 CTest 来驱动配置和构建。

    关于c++11 - 如何使用 cmake 测试我的库中的 static_assert?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692820/

    相关文章:

    c++ - 按级别缩进的 pretty-print C++ 容器

    c++ - 无法在另一台使用 OS-X Leopard (10.5.8) 的 Mac 上运行在 OS-X Snow Leopard (10.6.7) 上编译的应用程序。返回 libstdc++.6.dylib 错误

    cmake - 如何将 cmake 指向库的特定目录?

    javascript - IEDriverServer 发送 key 的速度极其缓慢 - JavaScript 替代建议

    browser - TestCafe - 浏览器在测试之间总是以干净的状态启动。如何覆盖它以便浏览器记住缓存、用户设置和存储

    c++ - 继承私有(private)构造函数

    C++ 类模板构造函数继承与指针

    c++ - std::bind() - 从派生类的成员函数中获取基保护成员函数

    c++ - 从源代码构建 MySQL Connector/C++(找不到 Boost 库错误)

    Rest Assured API 差异 b/t param() 和 queryParam()