CMake und Qt Testmodul



  • Hallo,
    ich hab folgendes Problem: ich wollte ein einfaches Beispiel mit cmake basteln, das einen UnitTest mit der Qt Test Library kompiliert. Ich hab das Teil zuerst mit einer *.pro-Datei kompiliert, hat geklappt. Allerdings ergibt der Lauf mit dem von CMake generierten Makefile einen Linkerfehler. Wäre schön, wenn jemand eine Lösung findet, im Web hab ich leider kein Beispiel gefunden.

    Die CMake-Datei die nicht funktioniert:

    project(MoneyTest)
    
    cmake_minimum_required(VERSION 2.6.0)
    find_package(Qt4 REQUIRED)
    include( ${QT_USE_FILE} )
    
    set(QT_USE_QTTEST TRUE)
    
    set(project_SRCS
      Money.h
      Money.cpp
      MoneyTest.cpp
      MoneyTest.h
    )
    set(project_MOCS
      MoneyTest.h
    )
    
    qt4_wrap_cpp(project_SRCS ${project_MOCS} )
    
    include_directories(${CMAKE_CURRENT_BINARY_DIR})
    
    add_executable(MoneyTest ${project_SRCS})
    target_link_libraries(MoneyTest ${QT_LIBRARIES})
    

    Fehlermeldung des Compiler/Linker

    [ 50%] Building CXX object CMakeFiles/MoneyTest.dir/Money.cpp.o
    [100%] Building CXX object CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o
    Linking CXX executable MoneyTest
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `QTest::qWait(int)':
    MoneyTest.cpp:(.text+0x70): undefined reference to `QTest::qSleep(int)'
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `QTest::simulateEvent(QWidget*, bool, int, QFlags<Qt::KeyboardModifier>, QString, bool, int)':
    MoneyTest.cpp:(.text+0xd3): undefined reference to `QTest::defaultKeyDelay()'
    MoneyTest.cpp:(.text+0xed): undefined reference to `QTest::defaultKeyDelay()'
    MoneyTest.cpp:(.text+0x18a): undefined reference to `QTest::qWarn(char const*)'
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `QTest::mouseEvent(QTest::MouseAction, QWidget*, Qt::MouseButton, QFlags<Qt::KeyboardModifier>, QPoint, int)':
    MoneyTest.cpp:(.text+0xead): undefined reference to `QTest::defaultMouseDelay()'
    MoneyTest.cpp:(.text+0xeca): undefined reference to `QTest::defaultMouseDelay()'
    MoneyTest.cpp:(.text+0x1404): undefined reference to `QTest::qWarn(char const*)'
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `MoneyTest::testAddition()':
    MoneyTest.cpp:(.text+0x156a): undefined reference to `QTest::qVerify(bool, char const*, char const*, char const*, int)'
    MoneyTest.cpp:(.text+0x1595): undefined reference to `QTest::qVerify(bool, char const*, char const*, char const*, int)'
    MoneyTest.cpp:(.text+0x15d1): undefined reference to `QTest::qVerify(bool, char const*, char const*, char const*, int)'
    MoneyTest.cpp:(.text+0x15f7): undefined reference to `QTest::qVerify(bool, char const*, char const*, char const*, int)'
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `MoneyTest::testSubtraction()':
    MoneyTest.cpp:(.text+0x16be): undefined reference to `QTest::qVerify(bool, char const*, char const*, char const*, int)'
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o:MoneyTest.cpp:(.text+0x16e9): more undefined references to `QTest::qVerify(bool, char const*, char const*, char const*, int)' follow
    CMakeFiles/MoneyTest.dir/MoneyTest.cpp.o: In function `main':
    MoneyTest.cpp:(.text+0x1801): undefined reference to `QTest::qExec(QObject*, int, char**)'
    collect2: ld returned 1 exit status
    make[2]: *** [MoneyTest] Fehler 1
    make[1]: *** [CMakeFiles/MoneyTest.dir/all] Fehler 2
    make: *** [all] Fehler 2
    

    Die *.pro-Datei die funktioniert.

    CONFIG += qtestlib
    SOURCES += Money.cpp
    HEADERS += Money.h \
        MoneyTest.h
    SOURCES += MoneyTest.cpp
    

Anmelden zum Antworten