Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
作为主要测试cmake目标的一部分,从外部项目运行测试_Cmake - Fatal编程技术网

作为主要测试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

我有一个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 ""
)

外部项目作为父项目生成的一部分生成。如果我从
${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冲突)