安装gtest之后,gmock_main.cc替换了我的main.cc

问题描述 投票:0回答:1

[我体验到,当'conan'安装了'gtest'时,我的'gmock_main'会以某种方式替换我的'main'。

我正在逐步向程序中添加更多库,并使用越来越多的行来conanfile.txt,清除子目录build中生成的文件,然后运行“ cmake ..; cmake --build。”。之后,我运行构建的二进制文件。

我的conanfile.txt是

[requires]
SystemC/2.3.3@minres/stable
SystemCVerification/2.0.1@minres/stable
doxygen_installer/1.8.15@bincrafters/stable
qt/5.12.0@bincrafters/stable
gtest/1.8.1@bincrafters/stable
#flex/2.6.4@bincrafters/stable

[generators]
cmake

[options]
SystemC:stdcxx=14
SystemCVerification:stdcxx=14

直到我添加行

gtest/1.8.1@bincrafters/stable

一切看起来都是文件,我的二进制文件启动并生成了我想要的。安装gtest后,“我自己的,非GTEST相关程序”的回复从[]更改为

       SystemC 2.3.3-Accellera --- Jun 15 2019 21:14:08
        Copyright (c) 1996-2018 by all Contributors,
        ALL RIGHTS RESERVED
 Correct usage:

to

Running main() from gmock_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[  PASSED  ] 0 tests.

如果我删除该行并从柯南数据库中删除gtest,请重建我的二进制文件,它将再次正常运行。我不知道,什么会导致这种奇怪的错误?在哪里找到原因?可能是偶然的名字卡住了吗?

提交后:

我猜想,问题是由gtest引起的。所以我做了以下事情:我保存了$ {CONAN_LIBS}的值没有和有线

gtest/1.8.1@bincrafters/stable

在我的conanfile.txt中有效

scv;
systemc;ssl;crypto;pcre2-posix;pcre2-8;pcre2-16;pcre2-32;double-conversion;
freetyped;harfbuzz;jpeg;sqlite3;pgcommon;pq;pthread;odbc;odbccr;odbcinst;ltdl;dl;bz2;png16d;m;z

以及gtest:

scv;
gmock_maind;gmockd;gtestd;
systemc;ssl;crypto;pcre2-posix;pcre2-8;pcre2-16;pcre2-32;double-conversion;
freetyped;harfbuzz;jpeg;sqlite3;pgcommon;pq;pthread;odbc;odbccr;odbcinst;ltdl;dl;bz2;png16d;m;z

为了获得更好的可见性,我将第二行分开,其中实际上包含与可疑行一起安装的库的名称。之后,我编辑了相应的CMakeLists.txt(在要求柯南安装gtest之前,我删除了实际的$ {CONAN_LIBS}并将其替换为以前的值。)

target_link_libraries(A
#    ${CONAN_LIBS}
scv;systemc;ssl;crypto;pcre2-posix;pcre2-8;pcre2-16;pcre2-32;double-conversion;freetyped;harfbuzz;jpeg;sqlite3;pgcommon;pq;pthread;odbc;odbccr;odbcinst;ltdl;dl;bz2;png16d;m;z
)

而且,我的应用程序按预期运行。这里发生了什么? gmock_main.cc如何替换我自己的.cc? (实际上是一个int sc_main(int argc,char * argv [])但可能没有什么区别)或更妙的是:如何避免呢?

我了解图书馆中的“ main”调用可以替代我自己的“ main”。为什么在库中有主要功能以及如何避免使用(我指的是除手动编辑外的其他方式)。

第二编辑:我还注意到,如果我离开

$ {CONAN_LIBS}在测试分支中,gmock_maind;接管控制:已经将我的测试放入其自己的主程序中,因为我使用的是基于System C的主程序(即int sc_main(int argc,char * argv [])),所以对我来说真的不是很好。最后,我再次编辑了柯南安装库列表,并删除了

gmock_maind; gmockd;

现在终于我的应用程序达到了我的期望。

这并不是我期望的轻松程度。据我所知,由于1.8.0 gmockgtest打包在一起。我不需要gmock,但可以。但是添加gmock_maind的原因是什么呢,它杀死了所有子项目,除了那些用于havin genter代码的子项目(这里是gmock主测试文件)之外。

是否有摆脱此gmock_maind的选项,或者是不包含gtest的最新gmock

我经历过,当'conan'安装了'gtest'时,我的'gmock_main'会以某种方式替换我的'main'。我正在逐步向程序中添加更多库,并对conanfile.txt使用越来越多的行,...

install googletest gmock conan
1个回答
0
投票

我想这是由gtest软件包的标准选项行为引起的。这些是gtest 1.10的默认选项:

   default_options = {"shared": False, "build_gmock": True, "fPIC": True, "no_main": False,"debug_postfix": 'd', "hide_symbols": False}
© www.soinside.com 2019 - 2024. All rights reserved.