Gtest:未定义的参考文献

Van*_*nce 17 c++ unix unit-testing cmake googletest

我正在尝试使用GoogleTest来测试一个简单的函数,但是当我make在build文件夹中运行时,编译器会Undefined Reference向我抛出错误消息.我引用了gtest头文件,所以我不确定是什么问题.有任何想法吗?我是unix和单元测试的全部主题的新手,所以我很可能会遗漏一些简单的东西.提前致谢!

错误消息:

CMakeFiles/Proj2.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "gtest/gtest.h"

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include "gtest/gtest.h"
#include "Testable.h"

TEST(GetTwoTest, Two) {
    EXPECT_EQ(2, GetTwo());
}
Run Code Online (Sandbox Code Playgroud)

Testable.cpp

#include "Testable.h"

int GetTwo() {
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.6)

SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support

set(FILES_TO_TEST Testable.cpp)
set(UNIT_TESTS Test.cpp)
set(MAIN_FILE main.cpp)

add_subdirectory(gtest) #Build all the gtest stuff
include_directories(gtest/include)
include_directories(.)
add_library(codeToTest ${FILES_TO_TEST})

add_executable(Proj2 ${MAIN_FILE})
target_link_libraries(Proj2 codeToTest)

add_executable(unit-test ${UNIT_TESTS})
target_link_libraries(unit-test gtest gtest_main rt pthread codeToTest)
Run Code Online (Sandbox Code Playgroud)

Fra*_*ser 11

您的设置几乎是正确的.但是,您需要具有2个独立的main功能; 一个用于真正的可执行文件Proj2,另一个用于gtest包含和测试可执行文件的功能unit-test.

您可以通过使用2个不同的main.cpp文件来完成此操作,例如main.cpp和test_main.cpp.您显示的那个将是test_main.cpp,并将包含在add_executable(unit-test ...命令中.

你的新main.cpp没有引用gtest,包括或函数.