在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"
}
我总是得到 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"
}