CMake:如何为每个测试重用相同的 test_main.cpp
CMake: How to reuse the same test_main.cpp for each test
我想在 monorepo 中使用测试框架 Catch2,其中会有很多组件,每个组件都有自己的测试。我想使用 CMake 来定义所有构建目标。
Catch2 provides a simple means 生成一个通用 main()
函数,它将 运行 所有测试链接到应用程序中。源文件(我称之为test_main.cpp
)就是这两行:
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
我想在我的源代码树中只有一个 test_main.cpp
的副本,并从每个具有测试的组件目录(最终将按数百个目录的顺序)引用它.
如果我复制 test_main.cpp
以便在每个目录中存在一个冗余副本并进行测试,我可以看到如何设置 CMake 工作,但我还没有弄清楚如何只有一个副本。有没有我忽略的简单技巧?
尝试通过以下方式将 Catch2 集成为 CMake interface library:
将单个头文件 catch.hpp
和 test_main.cpp
添加到它们自己的目录(例如 Catch2
)以及以下 CMakeLists.txt
:
add_library(catch INTERFACE)
target_include_directories(catch INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_sources(catch INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/test_main.cpp")
最外层的 CMakeLists.txt
包括 Catch2 和 add_subdirectory
:
add_subdirectory(Catch2)
然后您可以通过以下方式在项目的任何位置设置测试可执行文件:
add_executable(
project_tests EXCLUDE_FROM_ALL
test_case1.cpp
test_case2.cpp
...
)
target_link_libraries(project_tests catch)
因为test_main.cpp
已作为接口源文件添加到catch
,它将被编译为测试可执行文件的一部分。
我想在 monorepo 中使用测试框架 Catch2,其中会有很多组件,每个组件都有自己的测试。我想使用 CMake 来定义所有构建目标。
Catch2 provides a simple means 生成一个通用 main()
函数,它将 运行 所有测试链接到应用程序中。源文件(我称之为test_main.cpp
)就是这两行:
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
我想在我的源代码树中只有一个 test_main.cpp
的副本,并从每个具有测试的组件目录(最终将按数百个目录的顺序)引用它.
如果我复制 test_main.cpp
以便在每个目录中存在一个冗余副本并进行测试,我可以看到如何设置 CMake 工作,但我还没有弄清楚如何只有一个副本。有没有我忽略的简单技巧?
尝试通过以下方式将 Catch2 集成为 CMake interface library:
将单个头文件 catch.hpp
和 test_main.cpp
添加到它们自己的目录(例如 Catch2
)以及以下 CMakeLists.txt
:
add_library(catch INTERFACE)
target_include_directories(catch INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_sources(catch INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/test_main.cpp")
最外层的 CMakeLists.txt
包括 Catch2 和 add_subdirectory
:
add_subdirectory(Catch2)
然后您可以通过以下方式在项目的任何位置设置测试可执行文件:
add_executable(
project_tests EXCLUDE_FROM_ALL
test_case1.cpp
test_case2.cpp
...
)
target_link_libraries(project_tests catch)
因为test_main.cpp
已作为接口源文件添加到catch
,它将被编译为测试可执行文件的一部分。