Boost.Tests: 指定函数名而不是 main
Boost.Tests: Specify function name instead of main
我正在使用 cmake 构建系统开发一个项目。默认情况下,CMake 有一个很好的框架,用于从一组 C/C++ 代码生成单个可执行文件。 cmake 函数称为 create_test_sourcelist。它所做的是生成一个 C/C++ 调度程序,其中包含一个主入口点,它将调用其他 C/C++ 代码。
因此我有一堆带有函数签名的 C/C++ 文件,例如:int TestFunctionality1(int argc, char *argv[])
,我想保持原样,除非它当然意味着更多工作。
我怎样才能保留这个系统并开始使用 BOOST_CHECK
?我无法弄清楚如何指定实际的主入口点未调用 int main(int argc, char *argv[])
。
我的目标是有一个与 Jenkins 集成的框架,因为该项目已经使用了 Boost,我相信这应该是可行的,无需重写现有的 CMake 测试套件并将所有测试更改为独立的 main
函数.
不幸的是,似乎没有直接和干净的方法来做到这一点。
一方面create_test_sourcelist
唯一有用的功能是生成一个测试驱动程序:一个(stupid 非常简单,天真,缺乏 hack/extend) C/C++ 基于 ${cmake-prefix}/share/cmake/Templates/TestDriver.cxx.in
的翻译单元(并且没有办法 select 一些其他模板)。
从另一方面来说,Boost UTF 提供了它自己的 test runner (which is equal to test driver in CMake's terminology), but in any variant (static, dynamic, single-header) it contains definition for main()
some way or another (even in case of external test runner)。
…所以你最终有两个 main()
功能,无法选择一个。
深入研究 create_test_sourcelist
的来源 我真的很想知道为什么他们将它实现为命令而不是作为序号(外部)cmake 模块 - 它没有做任何特殊的(它可以'不能使用 CMake 语言实现)。这个命令真的很愚蠢——它不检查所需的函数是否真的存在(如果错误的话你会得到编译错误)。根本没有办法灵活定制输出源文件。所做的只是从源文件列表中剥离路径和扩展名,并使用序号 configure_file()
…
将其替换为提到的模板
所以,我个人认为根本没有理由使用它。这就是为什么我在上面评论中提到的模块中做了同样(但更好;)的工作。
如果您仍然想使用该命令,生成的测试驱动程序如果您想使用 Boost UTF 则完全没用。无论如何,您都需要提供自己的 initialization function(而不是 main()
),您可以在其中手动将测试用例注册到主测试套件中(或将测试组织到更复杂的树中)。在那种情况下,绝对没有理由使用 create_test_sourcelist
!您可以从中获得的所有内容都是需要提供给 add_executable()
的资源列表……但是使用 set()
更容易做到……这个命令甚至无法帮助您使用 w/要调用的测试函数列表(文件名列表 w/o 实际上是扩展名)(它在内部使用而不是导出)。您还想使用那个命令吗??
我正在使用 cmake 构建系统开发一个项目。默认情况下,CMake 有一个很好的框架,用于从一组 C/C++ 代码生成单个可执行文件。 cmake 函数称为 create_test_sourcelist。它所做的是生成一个 C/C++ 调度程序,其中包含一个主入口点,它将调用其他 C/C++ 代码。
因此我有一堆带有函数签名的 C/C++ 文件,例如:int TestFunctionality1(int argc, char *argv[])
,我想保持原样,除非它当然意味着更多工作。
我怎样才能保留这个系统并开始使用 BOOST_CHECK
?我无法弄清楚如何指定实际的主入口点未调用 int main(int argc, char *argv[])
。
我的目标是有一个与 Jenkins 集成的框架,因为该项目已经使用了 Boost,我相信这应该是可行的,无需重写现有的 CMake 测试套件并将所有测试更改为独立的 main
函数.
不幸的是,似乎没有直接和干净的方法来做到这一点。
一方面的功能是生成一个测试驱动程序:一个(create_test_sourcelist
唯一有用stupid 非常简单,天真,缺乏 hack/extend) C/C++ 基于 ${cmake-prefix}/share/cmake/Templates/TestDriver.cxx.in
的翻译单元(并且没有办法 select 一些其他模板)。
从另一方面来说,Boost UTF 提供了它自己的 test runner (which is equal to test driver in CMake's terminology), but in any variant (static, dynamic, single-header) it contains definition for main()
some way or another (even in case of external test runner)。
…所以你最终有两个 main()
功能,无法选择一个。
深入研究 create_test_sourcelist
的来源 我真的很想知道为什么他们将它实现为命令而不是作为序号(外部)cmake 模块 - 它没有做任何特殊的(它可以'不能使用 CMake 语言实现)。这个命令真的很愚蠢——它不检查所需的函数是否真的存在(如果错误的话你会得到编译错误)。根本没有办法灵活定制输出源文件。所做的只是从源文件列表中剥离路径和扩展名,并使用序号 configure_file()
…
所以,我个人认为根本没有理由使用它。这就是为什么我在上面评论中提到的模块中做了同样(但更好;)的工作。
如果您仍然想使用该命令,生成的测试驱动程序如果您想使用 Boost UTF 则完全没用。无论如何,您都需要提供自己的 initialization function(而不是 main()
),您可以在其中手动将测试用例注册到主测试套件中(或将测试组织到更复杂的树中)。在那种情况下,绝对没有理由使用 create_test_sourcelist
!您可以从中获得的所有内容都是需要提供给 add_executable()
的资源列表……但是使用 set()
更容易做到……这个命令甚至无法帮助您使用 w/要调用的测试函数列表(文件名列表 w/o 实际上是扩展名)(它在内部使用而不是导出)。您还想使用那个命令吗??