CMake 中预期的构建失败测试

2024-01-26

有时最好检查某些东西是否无法构建,例如:

// Next line should fail to compile: can't convert const iterator to iterator.
my_new_container_type::iterator it = my_new_container_type::const_iterator();

是否可以将这些类型的东西合并到 CMake/CTest 中?我正在寻找这样的东西CMakeLists.txt:

add_build_failure_executable(
    test_iterator_conversion_build_failure
    iterator_conversion_build_failure.cpp)
add_build_failure_test(
    test_iterator_conversion_build_failure
    test_iterator_conversion_build_failure)

(当然,据我所知,这些特定的 CMake 指令并不存在。)


您或多或少可以按照您的描述进行操作。您可以添加一个无法编译的目标,然后添加一个调用的测试cmake --build尝试建立目标。剩下的就是设置测试属性WILL_FAIL为真。

因此,假设您的测试位于名为“will_fail.cpp”的文件中,其中包含:

#if defined TEST1
non-compiling code for test 1
#elif defined TEST2
non-compiling code for test 2
#endif

然后你可以在 CMakeLists.txt 中包含类似以下内容:

cmake_minimum_required(VERSION 3.0)
project(Example)

include(CTest)

# Add a couple of failing-to-compile targets
add_executable(will_fail will_fail.cpp)
add_executable(will_fail_again will_fail.cpp)
# Avoid building these targets normally
set_target_properties(will_fail will_fail_again PROPERTIES
                      EXCLUDE_FROM_ALL TRUE
                      EXCLUDE_FROM_DEFAULT_BUILD TRUE)
# Provide a PP definition to target the appropriate part of
# "will_fail.cpp", or provide separate files per test.
target_compile_definitions(will_fail PRIVATE TEST1)
target_compile_definitions(will_fail_again PRIVATE TEST2)

# Add the tests.  These invoke "cmake --build ..." which is a
# cross-platform way of building the given target.
add_test(NAME Test1
         COMMAND ${CMAKE_COMMAND} --build . --target will_fail --config $<CONFIGURATION>
         WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_test(NAME Test2
         COMMAND ${CMAKE_COMMAND} --build . --target will_fail_again --config $<CONFIGURATION>
         WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
# Expect these tests to fail (i.e. cmake --build should return
# a non-zero value)
set_tests_properties(Test1 Test2 PROPERTIES WILL_FAIL TRUE)

如果您有很多要编写的内容,显然可以将所有这些内容包装到一个函数或宏中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 中预期的构建失败测试 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • 按 \n 字符分割似乎不起作用

    我从服务器获得结果 其中项目用新行分隔 所以我执行以下操作 split n split n 这不起作用 这 在 Chrome 上调试时消失 我看到 split n 如何让它发挥作用 示例数据 从chrome调试器复制 六月六日 10 六月六
  • jstree create_node 的参数

    您能给我这个函数的参数列表和使用示例吗 treepanel jstree create node 恕我直言 jsTree 很强大 但文档还有待改进 create node 函数已记录here https www jstree com api
  • 使用 awk 切换 csv 文件的列

    我想在 csv 文件中将第 2 列与第 3 列交换 cat test csv 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 我尝试过 awk FS OFS col1 1 col2 2 col3 3 print co
  • 如何在 Amazon Linux 上升级/安装 Upstart deamon 版本 1.5

    我通过 EC2 服务实例化一台 Amazon Linux 计算机 并且该虚拟机已经安装了版本 0 6 5 的 Upstart 守护程序 如何将此软件包升级到最新版本 本例为 1 5 版 sudo initctl version return
  • 如何在两个不同的docker容器中的两个django应用程序之间建立连接?

    我创建了两个应用程序 myapi 和 minombre 其中 minombre 将向 myapi 发出一个简单的 GET 请求 并将它们放入两个单独的 docker 容器中 在运行 docker compose up 后 容器运行 但api
  • 无法使用 DBeaver 连接到 MariaDB

    我刚刚在 Ubuntu 18 04 上安装了 MariaDB 10 1 29 从命令行我可以使用 sudo 连接 sudo mysql u root p 但并非没有 sudo 另外 如果我尝试通过连接到数据库DBeaver https db
  • 需要更好的方法使用 jquery 验证插件来验证 ASP.NET 复选框吗?

    Problem 我想使用 jquery 验证插件来验证一些 ASP NET 复选框 位于 http bassistance de jquery plugins jquery plugin validation http bassistanc
  • Windows 上 JDK 8 的默认 -Xss 值

    Oracle 说在 Windows 上 http docs oracle com javase 8 docs technotes tools windows java html Xsssize 默认值取决于虚拟内存 我如何找出给定 Orac
  • Windows 上的“docker-compose up”失败,Mysql 容器步骤出现错误

    我正在尝试使用 docker 和 docker compose yml 在 phpstorm 中设置在 Windows 10 上进行 php 开发的环境 但在 Mysql 设置步骤中遇到了一些错误 找不到问题 这是我的 docker com
  • 连接字符串的节点内存使用情况

    我有以下代码来测试节点虚拟机的内存使用情况 setInterval gt console log process memoryUsage 1000 gt const MAXTIMES 10000000 let a gt let res fo
  • 更新 Android SDK 工具 REV 22 后出现错误“无法解析 L 的超类”

    昨天项目还好 但是今天更新Sdk工具和ADT REV 22 时 运行项目时出现 无法解析L的超类 之类的错误 我的项目使用 ActionbarSherlock 和 SlidingMenu 我已经尝试过 将外部 jar 复制到我的项目的 li
  • 为什么 pthread-win32 中主线程比工作线程慢?

    void worker void int clk clock float val 0 for int i 0 i 100000000 i val sin i printf val f n val printf worker d ms n c
  • 如何针对 GitHub 问题上的特定分支

    我想知道是否可以目标问题到存储库的特定分支 使用案例 我有一个有 1 个主分支的仓库 和2个开发分支 A 和 B 根据问题的不同 其他分支会从 A 分支和 B 分支中生长出来 我已经知道可以通过 关键字和问题编号来引用问题提交 但我希望将其
  • 从 GitLab 运行程序/管道中创建版本

    随着 2019 年 1 月 Gitlab 11 7 的发布 我们获得了新的关键功能为您的项目发布版本 https about gitlab com 2019 01 22 gitlab 11 7 released publish releas
  • 如何本地化活动记录错误消息

    我试图找出如何本地化我的 Rails 应用程序中的错误项目名称 当用户使用不正确的数据注册时会出现该错误项目名称 我想出了如何覆盖消息 但不覆盖消息的名称 例如 password 登录 电子邮件 de activerecord errors
  • PowerShell - 在特定范围内执行脚本块

    我正在尝试在 Powershell 中实现像 BDD 框架一样的 RSpec Jasmine 或者至少研究制作一个框架的潜在问题 目前 我在实现简单的前后功能时遇到问题 给定 ErrorActionPreference Stop funct
  • 如何正确创建 Zend Feed?

    我已经成功创建了一个简单的 RSS 提要 但条目不断返回为未读和更新状态 并且每次我要求邮件更新提要时 从客户端删除的条目都会重新出现 我究竟做错了什么 我使用这个简单的函数来创建 rss feed public static functi
  • jquery 设置加载后的高度

    我在设置动态加载的元素的高度时遇到了一些麻烦 我用jqueryload函数将外部 动态 页面加载到当前页面上的 div cbox 中 因为这个子页面是动态的 所以我无法事先知道内容的高度是多少 我想在加载内容后获取高度 并将容器 div 的
  • Android dropbox api 需要重新验证

    在我的应用程序中 我使用 dropbox api 来保存一些文件 没问题 身份验证后 我关闭应用程序并重新启动应用程序 每次我打开应用程序时都需要重新身份验证 我希望应用程序记住我的会话 Dropbox 教程 https www dropb
  • CMake 中预期的构建失败测试

    有时最好检查某些东西是否无法构建 例如 Next line should fail to compile can t convert const iterator to iterator my new container type iter