我总是得到undefined reference to m()
,这是我的代码:
ex.c
#include "stdio.h"
void m() {
}
实施例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)
这是我的output in clion(对不起,加薪#34;主要是代码"我复制时出错
答案 0 :(得分:1)
y
编译为C. ex.c
编译为C ++但引用
来自ex_test.cpp
的{{1}},因此在m()
中您需要通知编译器
ex.c
中的声明具有C链接(因此没有名称修改)。
替换:
ex_test.cpp
使用:
ex.h
答案 1 :(得分:-1)
您的问题标题只是指出了什么问题:您应该将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)