作为主要测试cmake目标的一部分,从外部项目运行测试
我有一个CMake项目,其中包括另一个使用作为主要测试cmake目标的一部分,从外部项目运行测试,cmake,Cmake,我有一个CMake项目,其中包括另一个使用ExternalProject\u Add的项目,其源代码在配置时可用: ExternalProject_Add(projectB PREFIX abc SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/projectB" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/projectB" INSTALL_COMMAND &quo
ExternalProject\u Add
的项目,其源代码在配置时可用:
ExternalProject_Add(projectB
PREFIX abc
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/projectB"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/projectB"
INSTALL_COMMAND ""
)
外部项目作为父项目生成的一部分生成。如果我从
${CMAKE\u CURRENT\u BINARY\u DIR}/projectB
运行make check
,我可以运行projectB
的测试,但我希望它们与make test
的所有其他测试一起运行。如何使projectB
的单元测试作为父级测试目标的一部分运行?如果您不关心为外部项目中的每个单独测试用例获得适当的机器可读测试报告,那么以下操作应该可以工作
add_test(projectB_tests
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/projectB" --target test
)
然而,缺点是CTest生成的XML只会指示projectB
的测试套件是否失败,但您需要读取测试运行的整个输出以查找哪个特定测试失败
如果在场景中不需要使用
ExternalProject
而不定义项目,那么简单的add\u子目录(projectB)
就可以了,而ProjectB的测试也会自动添加到您的测试目标中。如果您不关心为外部项目中的每个单独测试用例获得适当的机器可读测试报告,那么下面的方法应该有效
add_test(projectB_tests
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/projectB" --target test
)
然而,缺点是CTest生成的XML只会指示projectB
的测试套件是否失败,但您需要读取测试运行的整个输出以查找哪个特定测试失败
如果在场景中不需要使用ExternalProject
而不定义项目,那么简单的add\u子目录(projectB)
就可以了,而ProjectB的测试也会自动添加到您的测试目标中。我在之前的CMake开发人员讨论中询问了他们:
维护人员之一Ben Boeckel回答如下:
我已经在我们的超级建筑基础设施中对此进行了黑客攻击。您可以根据您的项目对其进行调整。有关档案:
该逻辑收集我们要测试的项目,提取它们的二进制目录,并配置一个CTestTestfile.cmake
来完成这项工作。然后,它使用蹦床为我们感兴趣的每个项目执行实际的subdirs
调用。此文件将添加到CTest要包含的文件列表中
在之前的讨论中,我询问了CMake开发人员:
维护人员之一Ben Boeckel回答如下:
我已经在我们的超级建筑基础设施中对此进行了黑客攻击。您可以根据您的项目对其进行调整。有关档案:
该逻辑收集我们要测试的项目,提取它们的二进制目录,并配置一个CTestTestfile.cmake
来完成这项工作。然后,它使用蹦床为我们感兴趣的每个项目执行实际的subdirs
调用。此文件将添加到CTest要包含的文件列表中
谢谢,我想做的已经足够了,在用--目标检查
替换--目标测试
之后,我就开始工作了。我发现ExternalProject
有助于避免一些配置错误(其中一个是projectB
中包含的gtest与父项目中的gtest冲突)。谢谢,这已经足够满足我想要做的事情,并且在用--目标检查
替换--目标测试
后工作。我发现ExternalProject
有助于避免一些配置错误(其中一个是projectB
中包含的gtest与父项目中的gtest冲突)