C++ 设置GoogleTest在一个可执行文件中运行所有测试

C++ 设置GoogleTest在一个可执行文件中运行所有测试,c++,googletest,C++,Googletest,在设置我最近的项目时,我试图使用GoogleTest。目前我有: macro(add_test_l TEST_NAME) # Create the executable and use the last arguments as source files. add_executable(${TEST_NAME} ${ARGN}) # Link in the AMR and gtest libraries. target_link_libraries(${TES

在设置我最近的项目时,我试图使用GoogleTest。目前我有:

macro(add_test_l TEST_NAME)

    # Create the executable and use the last arguments as source files.
    add_executable(${TEST_NAME} ${ARGN})

    # Link in the AMR and gtest libraries.
    target_link_libraries(${TEST_NAME}
        ${PROJECT_NAME}
        gtest
        gmock
        gtest_main
    )

    # Add the test to gtest.
    add_test(
        NAME ${TEST_NAME}
        COMMAND ${TEST_NAME}
    )

    list(APPEND TEST_SOURCE_FILES ${ARGN})

endmacro()
然后我可以添加我的测试,比如
add\u test\l(Element set/Element.test.cpp)
,这样既有效又方便。但这当然会为每个测试创建一个可执行文件,这并不是一件坏事,因为它允许对单个文件进行快速测试

虽然我确实希望能够使用单个exe运行所有测试(这样CI将更容易),但我在宏的末尾列出了该列表,在添加了所有单个测试之后,我有:

add_executable(all_tests ${TEST_SOURCE_FILES})
target_link_libraries(all_tests
    ${PROJECT_NAME}
    gtest
    gmock
    gtest_main
)
它创建一个EXE来运行我的所有测试用例


这似乎并不高效,因为我将所有文件编译了两次。有没有更好的方法让我达到预期的结果?也许我可以添加一个选项来启用/禁用单个测试和所有测试的EXE。

每个文件都不需要一个可执行文件。为所有测试构建一个可执行文件,并学习gtest选项--gtest_过滤器。您可以单独运行每个测试:

all_tests --gtest_filter=Element.Test
或者您可以运行所有元素测试,如宏
add\u test\l
是否:

all_tests --gtest_filter=Element.*
有关命令行选项的详细信息,请参见:

all_tests --help
其中一个有用的命令:

all_tests --gtest_list_tests