CMake 和 GTest 链接测试
CMake and GTest linking tests
我想用cmake和gtest构建和测试我的一个小项目。在项目中,我有一个函数readModel(...)
其中定义和实现是分开的。该项目构建良好,但我收到以下链接器错误以测试readModel(...)
cd /home/kain88/Desktop/example/build/test && /usr/bin/cmake -E cmake_link_script CMakeFiles/example_test.dir/link.txt --verbose=1
/usr/bin/c++ -Wall -std=c++14 CMakeFiles/example_test.dir/pdb_test.cpp.o -o example_test -rdynamic ../ext/gtest-1.7.0/libgtest.a ../ext/gtest-1.7.0/libgtest_main.a ../ext/gtest-1.7.0/libgtest.a -lpthread
CMakeFiles/example_test.dir/pdb_test.cpp.o: In function `PDB_TEST_readModel_Test::TestBody()':
pdb_test.cpp:(.text+0x13): undefined reference to `readModel(std::string const&)'
collect2: error: ld returned 1 exit status
cmake 似乎不包括在测试的 src
文件夹中生成的*.o
文件。我如何告诉 cmake 它也应该包含 src
文件夹中的*.o
文件进行测试?
这是我在测试文件夹中使用的CMakeLists.txt。
# enable GTest
enable_testing()
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/src)
# Unit Test
set(PROJECT_TEST_NAME ${PROJECT_NAME_STR}_test)
file(GLOB TEST_SOURCES "*.cpp")
add_executable(${PROJECT_TEST_NAME} ${TEST_SOURCES})
target_link_libraries(${PROJECT_TEST_NAME} gtest gtest_main)
add_test(test ${PROJECT_TEST_NAME})
完整的条带化示例案例可在此处找到
您可以创建一个编译 .o 对象文件的对象库目标:
ADD_LIBRARY(${PROJECT_NAME}_objects OBJECT ${SRC_FILES} ${INCL_FILES})
在 lib/exe 和测试上使用它的结果:
ADD_EXECUTABLE(${PROJECT_NAME} $<TARGET_OBJECTS:${PROJECT_NAME}_objects>)
ADD_EXECUTABLE(${PROJECT_TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:${PROJECT_NAME}_objects>)
PS:您可以使用相同的技巧来编译多个目标共享的对象一次,例如共享和静态库目标。
相关文章:
- 运行 C++ 单元测试时LNK2005链接错误
- 如何在C++中通过链接器进行模拟测试
- 链接CPP文件进行测试时发生LNK2019错误
- 使用cmake构建google测试单元测试时出现链接器错误
- C++ 使用链接时间替换进行单元测试
- 我无法编译谷歌测试,告诉链接器输入未使用(macOS)
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 将单元测试添加到旧解决方案时出现链接错误
- 将我的主输出库与测试可执行文件链接时出现问题
- 模板或链接接缝依赖注入有哪些替代方案来测试非虚拟方法?
- C++/CLR 托管单元测试存在链接器错误
- C++ / GoogleTest - 如何在链接目录中为每个测试运行安装程序
- Cmake,子目录和Google测试(模拟)无法正确链接.找不到测试
- Qt测试模拟动态链接库
- 难以在测试中链接项目中的对象文件
- 每次捕获测试框架较长的链接时间
- 交叉围栏GCC:在检查动态链接器特征时,在GCC_NO_EXECUTABLES之后不允许链接测试
- cmake - 单元测试++链接单元测试二进制文件失败
- 使用Boost.构建和提升.测试链接器错误
- 增强测试链接