gpt4 book ai didi

c++ - 您只需要构建一次 googletest 库吗?

转载 作者:行者123 更新时间:2023-11-30 05:42:29 25 4
gpt4 key购买 nike

所以首先,我是测试框架的新手,也是 C++ 的新手,但我正在尝试全神贯注于 GoogleTest。我在 Windows 机器上工作,运行“Git for Windows”(MSYS) 和 MinGW,同时使用 Sublime Text 作为我的代码编辑器。我正在使用 make 作为我的构建工具,尽管我对 cmake 及其跨平台关注的了解越多,我就越想知道我是否应该切换为让 cmake 为我创建 makefile。 (这可能是另一个问题)

我一直难以理解的是如何准确处理 GoogleTest 源代码包。我意识到我需要将源构建到库中,然后在编译我的测试时包括它,但我应该如何去做呢? Google 包含一个 cmake 构建脚本,该脚本生成用于构建的环境/编译器特定的 makefile。我应该使用这个吗?我觉得如果我这样做并且它盲目地起作用,那么引擎盖下发生的很多事情都会让我头疼。自述文件并没有解决我的问题,因为它暗示我应该在每次希望运行它们时构建库和测试。图书馆不应该是一个只需要编译一次的独立文件吗?我很困惑,我确信这是我的错,但如果有人能为我阐明这个过程,我将不胜感激。

最佳答案

您应该记住,如果您不更改 gtest 源代码中的任何内容,ma​​ke 将不会重建 gtest

下面是我使用 cmake 和 gtest 进行单元测试的方法。

您可以通过将 gtest 源代码添加为根 CMakeLists.txt 文件中的子目录来添加它。

add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/gtest ${CMAKE_CURRENT_BINARY_DIR}/gtest)
include_directories(${CMAKE_SOURCE_DIR}/thirdparty/gtest/include ${CMAKE_SOURCE_DIR}/thirdparty/gtest)

我的应用程序由单独的模块组成,其中包含用于单元测试的测试文件夹。我有以下样板循环将每个测试添加到全局范围。

file(GLOB TEST_SRC_FILES *.cpp) 
foreach(TEST_SRC_PATH ${TEST_SRC_FILES})
#get filename of your test without extension
get_filename_component(TEST_NAME ${TEST_SRC_PATH} NAME_WE)

add_executable(${TEST_NAME} ${TEST_NAME})

#here you link the test executable with gtest
target_link_libraries(${TEST_NAME} gtest gtest_main)

#-----------------------------
# you can link here your test to external libraries
#-----------------------------

add_test(${TEST_NAME} ${TEST_NAME})

#this is a list of all tests
set(PROJECT_TEST_NAMES ${PROJECT_TEST_NAMES} ${TEST_NAME})
endforeach()

#This assigns the list of tests to a property. This make the list available from the root scope.
get_property(UNIT_TESTS GLOBAL PROPERTY UNIT_TESTS)
set(UNIT_TESTS ${UNIT_TESTS} ${PROJECT_TEST_NAMES})
set_property(GLOBAL PROPERTY UNIT_TESTS ${UNIT_TESTS} )

最后,在根范围内,我添加了一个名为 check 的自定义目标,它在我的单元测试中运行 ctest。

#-----------------------------
# Running unit tests
#-----------------------------
get_property(UNIT_TESTS GLOBAL PROPERTY UNIT_TESTS)
if(DEFINED UNIT_TESTS)
add_custom_target(check COMMAND ctest -VV
DEPENDS ${UNIT_TESTS})
endif()

当我运行 make check 时,它会从所有模块运行单元测试,而 make 会在没有测试的情况下进行编译。

关于c++ - 您只需要构建一次 googletest 库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30622014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com