c++ - cmake/ctest : is it possible to use the creation of build targets as tests?

标签 c++ code-generation cmake ctest

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

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

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

最佳答案

如果您使用的是足够新的 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。

关于c++ - cmake/ctest : is it possible to use the creation of build targets as tests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760605/

相关文章:

c++ - 为什么从constexpr引用生成的汇编代码与constexpr指针生成的汇编代码不同?

visual-studio - 重命名 OpenAPI 的引用生成的 swagger.json

boost - CMake FindBoost 为 -mt-s 库后缀

c++ - 让 doxygen 知道 cpp 中的命名空间

c++ - 指针是指向单个项目还是指向数组?

c - 在没有 C 运行时的情况下与 VS2010 链接时未解析的符号

c++ - 使用升压测试和不应编译的测试的最佳实践

opencv - 使用mingw32-make编译opencv时如何解决 'does not name a type'?

c++ - 如何在 C++ 中减去两个位集

c++ - 为模板化类型确定正确谓词的方法