链接C和C ++文件

时间:2017-04-18 14:13:30

标签: c++ g++ googletest

我想用我构建的测试编译node.c,list.c和helper-functions.c。

我确定我没有按照自己的意愿编写makefile。请查看一下吗?

CFLAGS= -Wall -Wvla -Werror
CXXFLAGS= -lgtest -lgtest_main -pthread

all:
    mkdir -p build
    gcc -c node.c  $(CFLAGS) -o build/node.o
    gcc -c list.c  $(CFLAGS) -o build/list.o 
    gcc -c tests/helper-functions.c -o build/helper-functions.o
    g++ tests/node-tests.cpp $(CXXFLAGS) -o build/node-tests.o
    g++ tests/list-tests.cpp $(CXXFLAGS) -o build/list-tests.o
    g++ build/list.o build/node.o build/helper-functions.o build/node-tests.o build/list-tests.o -o build/tests.out
    ./build/tests.out

当我运行make时,输出为:

mkdir -p build
gcc -c node.c  -Wall -Wvla -Werror -o build/node.o
gcc -c list.c  -Wall -Wvla -Werror -o build/list.o 
gcc -c tests/helper-functions.c -o build/helper-functions.o
g++ tests/node-tests.cpp -lgtest -lgtest_main -pthread -o build/node-tests.o
/tmp/ccFTgPVe.o: In function `CreateNode_FirstTest_Test::TestBody()':
node-tests.cpp:(.text+0x21): undefined reference to `createNode'
node-tests.cpp:(.text+0x31): undefined reference to `data'
node-tests.cpp:(.text+0x108): undefined reference to `next'
node-tests.cpp:(.text+0x1db): undefined reference to `freeNode'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

在node-test.cpp中肯定会引用所有这些函数。

节点tests.cpp:

extern "C"
{
    #include "../../../../headers/list.h"
    #include "../../../../headers/node.h"
    #include "helper-functions.h"
    #include <assert.h>
}
#include "gtest/gtest.h"
#include <iostream>
#include <cstdlib>
#include <string>


// Node* CreateNode(void* data,const size_t dataLength,void* deepCopy(void*,const size_t));

TEST(CreateNode, FirstTest) {

    int x=10;
    Node* pos=createNode(&x,sizeof(x));
    EXPECT_TRUE(*(int*)data(pos)==x);
    EXPECT_TRUE(next(pos)==NULL);
    freeNode(pos);
}

list-tests.cpp类似于node-tests.cpp。

1 个答案:

答案 0 :(得分:0)

CFLAGS= -Wall -Wvla -Werror
CXXFLAGS= -lgtest -lgtest_main -pthread

all:
    mkdir -p build
    gcc -c node.c $(CFLAGS) -o build/node.o
    gcc -c list.c $(CFLAGS) -o build/list.o 
    gcc -c tests/helper-functions.c $(CFLAGS) -o build/helper-functions.o
    g++ -c tests/node-tests.cpp -o build/node-tests.o //added -c, removed $(CXXFLAGS)
    g++ -c tests/list-tests.cpp -o build/list-tests.o // added -c, $(CXXFLAGS)
    g++ build/list.o build/node.o build/helper-functions.o build/node-tests.o build/list-tests.o $(CXXFLAGS) -o build/tests.out // added $(CXXFLAGS)
    ./build/tests.out