[我体验到,当'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 gmock
和gtest
打包在一起。我不需要gmock
,但可以。但是添加gmock_maind
的原因是什么呢,它杀死了所有子项目,除了那些用于havin genter代码的子项目(这里是gmock主测试文件)之外。
是否有摆脱此gmock_maind
的选项,或者是不包含gtest
的最新gmock
?
我经历过,当'conan'安装了'gtest'时,我的'gmock_main'会以某种方式替换我的'main'。我正在逐步向程序中添加更多库,并对conanfile.txt使用越来越多的行,...
我想这是由gtest软件包的标准选项行为引起的。这些是gtest 1.10的默认选项:
default_options = {"shared": False, "build_gmock": True, "fPIC": True, "no_main": False,"debug_postfix": 'd', "hide_symbols": False}