首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个cmake文件中集成g++和gtest

如何在一个cmake文件中集成g++和gtest
EN

Stack Overflow用户
提问于 2019-08-01 17:49:12
回答 1查看 210关注 0票数 1

我正在尝试将一个普通的编译和带有gtest的单元测试集成到一个cmake文件中,但我不知道如何实现这一点。这是我的项目:

代码语言:javascript
运行
复制
|---include
|     |---Student.h
|
|---src
|    |---Student.cpp
|    |---main.cpp
|
|---unittest
|      |---TestStudent.cpp
|
|---CMakeLists.txt   # how to write this file?

因此,Student.hStudent.cppmain.cpp是源代码,TestStudent.cpp是测试代码,其中包括gtest/gtest.h和一个主函数,如下所示:

代码语言:javascript
运行
复制
#include "gtest/gtest.h"
#include "Student.h"

class TestStudent : public ::testing::Test
{
protected:
    Student *ps;
    void SetUp() override
    {
        ps = new Student(2, "toto");
    }

    void TearDown() override
    {
        delete ps;
    }
};


TEST_F(TestStudent, ID)
{
    EXPECT_TRUE(ps->GetID() == 2);
    EXPECT_TRUE(ps->GetName() == "toto");
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

现在,如果我想编译源代码,我需要运行g++ -std=c++11 Student.cpp main.cpp -o a.out,而如果我想编译测试代码,我需要运行g++ -std=c++11 TestStudent.cpp Student.cpp -lgtest -lpthread -o test.out

那么,如何编写CMakeLists.txt来编译不同的目标,比如cmake NORMALcmake TEST

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 20:27:02

正如评论中所指出的,通过add_executable使用多个目标。下面的CMakeLists.txt将生成两个目标,分别生成可执行文件studentstudent-test

如果您不关心CTest,那么可以省略最后三行。

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.9)
project(Student CXX)

set(CMAKE_CXX_STANDARD 11)

set(SOURCES src/Student.cpp)
set(INCLUDES include)

find_package(GTest REQUIRED)

add_executable(student src/main.cpp ${SOURCES})
target_include_directories(student PRIVATE ${INCLUDES})

add_executable(student-test unittest/TestStudent.cpp ${SOURCES})
target_include_directories(student-test PRIVATE ${INCLUDES})
target_link_libraries(student-test GTest::GTest GTest::Main)

enable_testing()
include(GoogleTest)
gtest_add_tests(TARGET student-test AUTO)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57306286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档