Use Google Test from Qt in Windows

后端 未结 3 1364
终归单人心
终归单人心 2021-02-08 15:45

I have a simple test file, TestMe.cpp:

#include 

TEST(MyTest, SomeTest) {
  EXPECT_EQ(1, 1);
}

int main(int argc, char **argv) {
  ::testi         


        
相关标签:
3条回答
  • 2021-02-08 16:13

    I never could get this to work as a static library, but it's working as a DLL.

    First, I had to build Google Test as a DLL. I did not have any success getting this to work in Visual Studio, so I just used mingw32-make. You can use the Makefile provided in the source, making the following changes:

    gtest-all.o : $(GTEST_SRCS_)
        $(CXX) $(CPPFLAGS) -DGTEST_CREATE_SHARED_LIBRARY=1 -I$(GTEST_DIR) $(CXXFLAGS) -c \
                $(GTEST_DIR)/src/gtest-all.cc
    
    gtest_main.o : $(GTEST_SRCS_)
        $(CXX) $(CPPFLAGS) -DGTEST_CREATE_SHARED_LIBRARY=1 -I$(GTEST_DIR) $(CXXFLAGS) -c \
                $(GTEST_DIR)/src/gtest_main.cc
    
    gtest.dll : gtest-all.o
        $(CXX) -shared -o $@ $^ -Wl,--out-implib,gtest_dll.lib
    
    gtest_main.dll : gtest-all.o gtest_main.o
        $(CXX) -shared -o $@ $^ -Wl,--out-implib,gtest_main_dll.lib
    

    Then, when compiling your test project, you must:

    • Define GTEST_LINKED_AS_SHARED_LIBRARY=1
    • Set a library reference to either gtest_dll.lib or gtest_main_dll.lib.
    • Paste gtest.dll or gtest_main.dll in the same directory as your executable.

    (My understanding is that you use gtest_main only if you are NOT providing your own main() function.)

    Here is a sample Qt pro file based on the one I have this is (finally!) working:

    DEFINES += GTEST_LINKED_AS_SHARED_LIBRARY=1
    SOURCES += main.cpp MyClassTests.cpp
    INCLUDEPATH += ../path/to/gtest/includes
    LIBS += -L../path/to/gtest/libraries -lgtest_dll \
        -L../ClassLibrary/bin -lMyClass
    CONFIG += console
    
    0 讨论(0)
  • 2021-02-08 16:15

    I think you are ok for your qmake file. But Why is INCLUDEPATH absolute and LIBS relative. I would try setting LIBS absolute also.

    From here http://doc.trolltech.com/4.6/qmake-variable-reference.html#includepath

    But what the main problem is (I think) you need to put forward slashes in INCLUDEPATH. In the docs it is like this.

    INCLUDEPATH += C:/gtest-1.5.0/gtest-1.5.0/include
    
    0 讨论(0)
  • 2021-02-08 16:18

    I'm using Qt + gtest/gmock without any issues. I've just tested all possible combinations of absolute/relative paths with different slashes, but I couldn't reproduce your problem. Have you checked the contents of "LIBS" variable from Makefile.Debug generated by qmake?

    Here's some generic piece of advice: don't use any absolute paths, because your code won't compile on other machines than your own, unless you'll download it to exacly same location (which might not be possible due to different Qt setup, etc.). Use relative paths instead, also for 3rd party libs.

    I keep the 3rd party libraries in version control system (you use one, right?). I have a "3rdparty" directory and for each project that uses those libs, I add svn:external property pointing to explicitly specified version of 3rd party lib. The last part is important, because it ensures that you'll be able to build every revision of your project, even when you update 3rd party library.

    0 讨论(0)
提交回复
热议问题