在gtest中,如何将lib文件添加到可执行测试文件

in gtest, how to add lib file to executable test file

我总是得到 undefined reference to m(),这是我的代码:

ex.c

#include "stdio.h"

void m() {

}

ex.h

void m();

ex_test.cpp

#include "gtest/gtest.h"
#include "ex.h"

TEST(m, 1) {
    m();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(try)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(src ex.c)
add_executable(try ${src})
add_subdirectory(gtest)
include_directories(${gtest_SOURCE_DIR} ${gtest_SOURCE_DIR}/include)
add_executable(ex_test ex_test.cpp ex.c)
target_link_libraries(ex_test gtest gtest_main)

这是我在 clion 中的 output(抱歉,复制时出现 "mostly code" 错误

你的问题标题已经指出了问题所在:你应该将ex的库添加到ex_test所需的库文件中。

编译ex.c,然后将编译结果文件ex.a追加到ex_test需要的库文件中。您可以通过 write CMakeLists.txt 文件来做到这一点,如下所示:

add_library(ex ex.c)
target_link_libraries(ex_test ex gtest gtest_main)

ex.c 编译为 C。 ex_test.cpp 编译为 C++,但指的是 m() 来自 ex.c,所以在 ex_test.cpp 中你需要通知编译器 ex.h 中的声明具有 C 链接(因此没有名称修改)。

替换:

#include "ex.h"

与:

extern "C" {
#include "ex.h"
}