QT Cmake GTest = Тест заканчивается смертельным исходом

#c #unit-testing #cmake #googletest #msys2

Вопрос:

Я попытался внедрить GTest в свой текущий проект. Я установил GTest через msys2 (windows) в режиме mingw64.

поэтому я создал это CmakeLists.txt

 cmake_minimum_required(VERSION 3.5)

project(TileGameStudio_Editor LANGUAGES CXX)
set(EDITOR_PROJECT ${PROJECT_NAME})

project(Tester LANGUAGES CXX)
set(TEST_PROJECT ${PROJECT_NAME})

#=============================================================== Setup CMake
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#=============================================================== Setup Paths
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(PROJ_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(PROJ_INC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(PROJ_UI ${CMAKE_CURRENT_SOURCE_DIR}/ui)
set(PROJ_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/libs)
set(PROJ_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests)
list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS ${PROJ_UI})

#=============================================================== Include Packages
find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS OpenGL REQUIRED)

set(ANGLE_INCLUDE_PATH "D:/Angle/angle/include")
set(ANGLE_LIBRARY_PATH "${PROJECT_SOURCE_DIR}/libs")

INCLUDE(FindPkgConfig)
find_package(Freetype REQUIRED)
find_package(LuaJIT REQUIRED)
find_package(PNG REQUIRED)
find_package(FLAC REQUIRED)
find_package(OGG REQUIRED)
find_package(THEORA REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(Boost COMPONENTS system filesystem json REQUIRED)
find_package(GTest REQUIRED)
find_library(GTest gtest)

#=============================================================== OUTPUT <LIB>_FOUND
if(NOT GTEST_FOUND)
  message(STATUS "GoogleTest:   NO")
else()
  message(STATUS "GoogleTest:   YES - under: ${GTEST_INCLUDE_DIRS}n                 at Root: ${GTEST_ROOT}")
endif()

if(NOT FREETYPE_FOUND)
  message(STATUS "freetype2:   NO")
else()
  message(STATUS "freetype2:   YES - under: ${FREETYPE_INCLUDE_DIR_ft2build}")
endif()

if(NOT LUAJIT_FOUND)
  message(STATUS "LuaJit:   NO")
else()
  message(STATUS "LuaJit:   YES - under: ${LUA_INCLUDE_DIR}")
endif()

if(NOT PNG_FOUND)
  message(STATUS "libPNG:   NO")
else()
  message(STATUS "libPNG:   YES - under: ${PNG_INCLUDE_DIR}")
endif()

if(NOT FLAC_FOUND)
  message(STATUS "FLAC:   NO")
else()
  message(STATUS "FLAC:   YES - under: ${FLAC_INCLUDE_DIR}")
endif()

if(NOT OGG_FOUND)
  message(STATUS "OGG:   NO")
else()
  message(STATUS "OGG:   YES - under: ${OGG_INCLUDE_DIR}")
endif()

if(NOT THEORA_FOUND)
  message(STATUS "THEORA:   NO")
else()
  message(STATUS "THEORA:   YES - under: ${THEORA_INCLUDE_DIR}")
endif()

if(NOT OPENSSL_FOUND)
  message(STATUS "OpenSSL:   NO")
else()
  message(STATUS "OpenSSL:   YES - under: ${OPENSSL_INCLUDE_DIR}")
endif()

#=============================================================== Include Directories
include_directories(
    ${PROJ_LIBS}
    ${PROJ_INC}
    ${PROJ_SRC}
    ${PROJ_UI}
    ${OPENGL_INCLUDE_DIR}
    ${FREETYPE_INCLUDE_DIR_ft2build}
    ${LUA_INCLUDE_DIR}
    ${ANGLE_INCLUDE_PATH}
    ${ANGLE_LIBRARY_PATH}
    ${PNG_INCLUDE_DIR}
    ${FLAC_INCLUDE_DIR}
    ${OGG_INCLUDE_DIR}
    ${THEORA_INCLUDE_DIR}
    ${OPENSSL_INCLUDE_DIR}
    ${Boost_INCLUDE_DIRS}
    ${GTEST_INCLUDE_DIRS}
)

link_directories (
    ${PROJ_LIBS}
    ${PROJ_INC}
    ${PROJ_SRC}
    ${PROJ_UI}
    ${OPENGL_LIBRARY_DIRS}
    ${FREETYPE_INCLUDE_DIR_ft2build}
    ${LUA_INCLUDE_DIR}
    ${ANGLE_INCLUDE_PATH}
    ${ANGLE_LIBRARY_PATH}
    ${PNG_INCLUDE_DIR}
    ${FLAC_INCLUDE_DIR}
    ${OGG_INCLUDE_DIR}
    ${THEORA_INCLUDE_DIR}
    ${OPENSSL_INCLUDE_DIR}
    ${Boost_LIBRARY_DIRS}
    ${GTEST_INCLUDE_DIRS}
)

#=============================================================== Find GLES Libraries
find_library(GLES2_Lib NAMES d3dcompiler_47 REQUIRED)
find_library(D3D_Lib NAMES libGLESv2 REQUIRED)
#find_library(EGL_Lib NAMES libEGL EGL libegl REQUIRED)

#=============================================================== Collect Sources, Hearders and UI
file(GLOB PROJECT_SOURCES CONFIGURE_DEPENDS
    ${PROJ_SRC}/*.cpp
)

file(GLOB PROJECT_HEADERS CONFIGURE_DEPENDS
    ${PROJ_INC}/*.h
)

file(GLOB PROJECT_TESTS CONFIGURE_DEPENDS
    ${PROJ_TESTS}/*.cpp
)

file(GLOB PROJECT_UI CONFIGURE_DEPENDS
    ${PROJ_UI}/*.ui
)

file(GLOB PROJECT_RES CONFIGURE_DEPENDS
    ${PROJ_SRC}/*.qrc
)
#=============================================================== Build App
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(${EDITOR_PROJECT}
        ${PROJECT_SOURCES}
        ${PROJECT_HEADERS}
        ${PROJECT_UI}
        ${PROJECT_RES}
        ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
    )
else()
    if(ANDROID)
        add_library(${EDITOR_PROJECT} SHARED
            ${PROJECT_SOURCES}
            ${PROJECT_HEADERS}
            ${PROJECT_UI}
            ${PROJECT_RES}
            ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
        )
    else()
        add_executable(${EDITOR_PROJECT}
            ${PROJECT_SOURCES}
            ${PROJECT_HEADERS}
            ${PROJECT_UI}
            ${PROJECT_RES}
            ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
        )
    endif()
endif()

add_executable(${TEST_PROJECT}
    ${PROJECT_SOURCES}
    ${PROJECT_HEADERS}
    ${PROJECT_TESTS}
)
enable_testing()

#=============================================================== Link Libraries
target_link_libraries(${EDITOR_PROJECT}
    PRIVATE Qt${QT_VERSION_MAJOR}::Core
    PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
    PRIVATE Qt${QT_VERSION_MAJOR}::Gui
    PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL
    ${OPENGL_gl_LIBRARY}
    ${FREETYPE_LIBRARIES}
    ${LUA_LIBRARY}
    ${GLES2_Lib}
    ${D3D_Lib}
    #${EGL_Lib}
    ${PNG_LIBRARY}
    ${FLAC_LIBRARY}
    ${OGG_LIBRARY}
    ${THEORA_LIBRARY}
    ${OPENSSL_CRYPTO_LIBRARY}
    ${OPENSSL_SSL_LIBRARY}
    ${OPENSSL_LIBRARIES}
    ${Boost_LIBRARIES}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY}
)

target_link_libraries(${TEST_PROJECT}
    PRIVATE Qt${QT_VERSION_MAJOR}::Core
    PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
    PRIVATE Qt${QT_VERSION_MAJOR}::Gui
    PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL
    ${OPENGL_gl_LIBRARY}
    ${FREETYPE_LIBRARIES}
    ${LUA_LIBRARY}
    ${GLES2_Lib}
    ${D3D_Lib}
    #${EGL_Lib}
    ${PNG_LIBRARY}
    ${FLAC_LIBRARY}
    ${OGG_LIBRARY}
    ${THEORA_LIBRARY}
    ${OPENSSL_CRYPTO_LIBRARY}
    ${OPENSSL_SSL_LIBRARY}
    ${OPENSSL_LIBRARIES}
    ${Boost_LIBRARIES}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY}
    ${GTEST_BOTH_LIBRARIES}
)

#=============================================================== Add GoogleTests
message("")
message("Adding Tests to ${TEST_PROJECT}")
message("")
gtest_add_tests(TARGET ${TEST_PROJECT} TEST_LIST outVar)
message("Tests were added to ${TEST_PROJECT}. The List:")
foreach(X ${outVar})
    message("-  ${X}")
endforeach()
message("")

 

Выходные данные конфигурации Cmake являются:

 GTest Libs are: GTest::gtest;GTest::gtest_main
-- GoogleTest:   YES - under:
                 at Root:
-- freetype2:   YES - under: C:/msys64/mingw64/include/freetype2
-- LuaJit:   YES - under: C:/msys64/mingw64/include/luajit-2.1
-- libPNG:   YES - under: C:/msys64/mingw64/include;C:/msys64/mingw64/include
-- FLAC:   YES - under: C:/msys64/mingw64/include
-- OGG:   YES - under: C:/msys64/mingw64/include
-- THEORA:   YES - under: C:/msys64/mingw64/include
-- OpenSSL:   YES - under: C:/Program Files/OpenSSL-Win64/include

Adding Tests to Tester

Tests were added to Tester. The List:
-  TestWindowMain.TestingTest

-- Configuring done
-- Generating done
 

Тестер main.cpp это просто:

 #include <gtest/gtest.h>

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

 

И единственный исходный файл тестера рядом с основным-это window_main.cpp:

 #include <gtest/gtest.h>
#include <window_main.h>

TEST(TestWindowMain, TestingTest){
    EXPECT_EQ(0,0) << "Test succeeded!";
    EXPECT_EQ(0,1) << "Test failed!";
}

 

It includes the Project1s window_main.h and should run these two dummy tests..
But all i come up with, is this (tests end fatal):
Link to Image on ddgobkiprc33d.cloudfront.net

 Der Test für das Projekt "Tester" ist abgestürzt.
Command line: [Path to Project build folder]_Build/Tester.exe 
PATH: C:Qt5.15.2mingw81_64lib;C:Qt5.15.2mingw81_64bin;C:msys64mingw64lib;C:msys64mingw64bin;C:QtToolsmingw810_64x86_64-w64-mingw32lib;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:Program FilesOpenSSL-Win64lib;C:Program FilesOpenSSL-Win64bin;C:QtToolsmingw810_64bin;C:Perl64bin;C:UsersbdcpaAppDataRoamingActiveStatebin;C:Program Files (x86)Common FilesOracleJavajavapath;C:Program Files (x86)Common FilesIntelShared Librariesredistintel64_wincompiler;E:OculusSupportoculus-runtime;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program FilesMicrosoft SQL ServerClient SDKODBC170ToolsBinn;C:Program Filesdotnet;C:Program Files (x86)GtkSharp2.12bin;E:Programmedepot_tools;C:msys64mingw64bin;C:msys64mingw32bin;C:msys64usrbin;C:QtToolsmingw810_64bin;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:QtToolsmingw810_64libpkgconfig;C:QtToolsmingw810_64x86_64-w64-mingw32libpkgconfig;D:Angleangleinclude;C:Qt5.15.2mingw81_64include;E:File DownloadsSDL2-2.0.14SDL2;D:Lua;D:Luajit_Source;D:Luajit_Build;E:ProgrammeGitcmd;C:Program Files (x86)Windows Kits10Windows Performance Toolkit;C:Program FilesOpenSSL-Win64;C:Program FilesCMakebin;C:UsersbdcpaAppDataLocalactivestatebin;E:Programmedepot_tools;C:msys64mingw64bin;C:msys64mingw32bin;C:msys64usrbin;C:QtToolsmingw810_64bin;C:QtToolsmingw810_64x86_64-w64-mingw32bin;C:Program FilesCMakebin;C:QtToolsNinja;C:Usersbdcpa.dotnettools;C:Python27;D:Microsoft VS Codebin;D:Angleangleinclude;E:File DownloadsSDL2-2.0.14SDL2;D:Lua;D:Luajit_Source;D:Luajit_Build;C:Program FilesOpenSSL-Win64;
Ausführungskonfiguration: "Tester"
 

Both Tests end up fata with all the Paths of my Sytem Environment..

I´m not really advanced in doing tests.. this is my first time trying that stuff out.. so.. it would be nice if you cen help me here 😀

Ps.: The Test (TestWindowMain.TestingTest) was added without a Problem.

PPs.: pls forgive some bad grammar or typos.. i´m not a native english speaker or writer.. i´m german ^^»