gpt4 book ai didi

c++ - 使用gtest时“_main already defined”

转载 作者:行者123 更新时间:2023-12-02 10:21:53 25 4
gpt4 key购买 nike

我有一个包含两个项目的解决方案

其中一个是控制台应用程序,另一个是Google Test项目

我的项目中有一个.h文件和一个带有main()的.CPP文件

我的gtest包含一个.CPP文件,该文件使用#include调用.h文件,并且具有RUN_ALL_TESTS()的主要功能

我在项目中需要一个main,但在gtest项目中也需要一个main,但是拥有两个main()不能让我成功构建gtest

有没有解决方法?
抱歉,如果这是一个愚蠢的问题,我不知道如何使用gtest,因为各种网站一直在以不同的方式呈现

最佳答案

首先,您应该为main.cpp函数有一个专用文件main(),其中不包含任何其他文件。

例如。您的项目结构如下所示:

  • project1
  • file1.h
  • file1.cpp
  • main.cpp

  • 我对gtest并不特别熟悉,但是通常单元测试框架为gtest主要功能有一个单独的文件,例如 gtest_main.cpp。测试在一个或多个文件中,例如 file1test.cpp等。

    因此,您将编译项目1并将其与 file1.hfile1.cppmain.cpp链接以获得可执行文件。

    对于单元测试,您将编译并链接 file1.hfile1.cppfile1test.cppgtest_main.cpp以获取单元测试可执行文件。

    结构可能像
  • project1
  • file1.h
  • file1.cpp
  • main.cpp
  • project1test
  • file1test.cpp
  • gtest_main.cpp

  • 编辑有关链接的其他信息:

    在project1test中,您将 file1.h#include "../project1/file1.h"包括在内。

    为了正确链接,请右键单击 project1test项目

    --> Configuration Properties --> Linker --> Input --> Additional Dependencies --> Add "..\project1\Debug\file1.obj"



    正如@Alan Birtles指出的那样,如果您具有以下结构,它将更加清晰:
  • project1library
  • file1.h
  • file1.cpp
  • project1应用
  • main.cpp
  • project1test
  • file1test.cpp
  • gtest_main.cpp

  • 您将获得一个静态/动态库 project1library.lib/.dll,一个可执行的 project1application.exe和一个单元测试可执行的 project1test.exe

    好处是您只需将单元测试项目中的库与

    --> Configuration Properties --> Linker --> Input --> Additional Dependencies --> Add "..\project1library\Debug\project1library.lib"



    如果您的项目需要多个文件,则不必添加每个obj文件,而只需添加一个lib文件。

    但是,使用lib,可执行文件和单元测试项目来确保根据更改正确地重建所有内容会更加困难且容易出错。

    关于c++ - 使用gtest时“_main already defined”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com