cmake/ctest:是否可以将构建目标的创建用作测试? 我有一个程序,它读取文件格式的描述(对于好奇的ISO 10303-11),并从中生成C++。生成的代码被编译到一个库中,该库与各种可执行文件链接,以读取/写入该文件格式

cmake/ctest:是否可以将构建目标的创建用作测试? 我有一个程序,它读取文件格式的描述(对于好奇的ISO 10303-11),并从中生成C++。生成的代码被编译到一个库中,该库与各种可执行文件链接,以读取/写入该文件格式,c++,code-generation,cmake,ctest,C++,Code Generation,Cmake,Ctest,我已经设置了CMake来构建生成器程序,并为配置时指定的任何文件格式生成库 现在,我想添加测试。这些测试与构建过程中已经完成的步骤相同-我必须在CTest脚本中重做这些步骤,还是有办法告诉CTest构建目标并捕获任何错误消息?您是否尝试过在CMakeLists.txt文件中说enable\u testing(),然后调用add\u test()要创建测试目标?如果您遵循CMake文档,我认为您可以在一个整合的构建脚本中完成所有工作。如果您使用的是足够新的ctest版本(最新的官方版本是2.8.6

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


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

您是否尝试过在
CMakeLists.txt
文件中说
enable\u testing()
,然后调用
add\u test()
要创建测试目标?如果您遵循CMake文档,我认为您可以在一个整合的构建脚本中完成所有工作。

如果您使用的是足够新的ctest版本(最新的官方版本是2.8.6),那么您可以使用add_test的名称/命令签名,并结合CMake--build命令行选项,在生成树中生成特定目标

例如,假设一个名为“tgt1”的自定义目标(或库或可执行目标),以下操作应该可以正常工作:

add_测试(名称test.build.tgt1
工作目录${CMAKE\U二进制目录}
命令${CMAKE_COMMAND}--build。--target tgt1--config$
)

这可以跨平台工作,并且在任何地方都使用相同的语法。它甚至可以与多配置生成器一起工作,如Visual Studio和Xcode。

是的,我已经使用了这两种生成器。我的问题是如何让ctest进行部分构建,然后运行测试。谢谢你,这使得跨平台支持比我编造的要容易得多。我使用了它,以及set_target_属性和set_test_属性:
set_target_属性(${target}properties将{u从{u ALL ON上排除)
set_tests_属性(构建${PROJECT_NAME}属性取决于生成${SCHEMA_SHORT_NAME}标签SCHEMA_构建)
。我已经为其他需要这样做的人创建了一个工作代码。
add_test(NAME test.build.tgt1
  WORKING_DIRECTORY ${CMAKE_BINARY_DIRECTORY}
  COMMAND ${CMAKE_COMMAND} --build . --target tgt1 --config $<CONFIGURATION>
)