如何使用断言打开和关闭的库构建?

我编写了一个库,并在程序中使用该库。 我经常在程序代码中进行更改,在打开断言的情况下运行测试,然后如果测试通过,则运行基准测试,关闭断言以测量我刚刚做出的更改对性能的影响。 我还希望在我的库中打开断言以进行测试,并在库中将它们关闭以进行基准测试。 所以我经常需要在程序和库中同时切换断言设置。

匹配库的断言设置(NDEBUG)和程序(使用库)必须不是手动的,因为错误意味着未定义的行为,因为标题中存在断言(冲突的定义导致未定义的行为)并且实际上我遇到了崩溃当我使用断言库构建断言程序时,使用GCC编程。 我无法找出标准的方法是什么。 我正在考虑让我的库构建系统安装两个二进制文件(以及可能包含错误的断言设置(NDEBUG)的头文件),名为libfoo-1.0和libfoo-assert-1.0或类似的东西。

什么是匹配库和程序之间的断言设置的最佳方法,以便同时切换断言设置既简单又快速且不容易出错?

通常,构建系统被设置为执行不同的构建(例如,调试/发布,multithreading/单线程)。 生成的库和可执行文件可以放在不同的目录中,也可以使用不同的名称来区分它们。 这没有什么不同。

如果您认为需要assert / noassert的其他构建类型,则只需添加此额外构建类型。 唯一的问题是命名约定,如果没有指定特定的构建类型,默认情况下会执行的操作。