【问题标题】:Build Qt Tests with CMake使用 CMake 构建 Qt 测试
【发布时间】:2011-06-12 20:03:37
【问题描述】:

谁能给我一个使用 Cmake 构建并使用 CTest 运行的 QT 测试代码和 CMakeLists.txt 的示例。好像没找到!

-库尔蒂斯

【问题讨论】:

    标签: qt cmake ctest qttest


    【解决方案1】:

    这是使用cmake 2.8.11 和Qt5.2 的示例。请注意,cmake 现在支持底部带有 .moc-include 的测试文件。

    CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8.11)
    project(foo)
    
    enable_testing()
    
    # Tell CMake to run moc when necessary:
    set(CMAKE_AUTOMOC ON)
    
    # As moc files are generated in the binary dir, tell CMake
    # to always look for includes there:
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    
    find_package(Qt5Test REQUIRED)
    
    add_executable(foo foo.cpp)
    add_test(foo foo)
    
    target_link_libraries(foo Qt5::Test)
    

    foo.cpp:

    #include <QTest>
    
    class Foo : public QObject {
        Q_OBJECT
    private slots:
        void t1() { QVERIFY(true); }
    };
    
    QTEST_MAIN(Foo)
    #include "foo.moc"
    

    【讨论】:

    • 我必须编辑 CMakeList 的最后一行来编译代码:target_link_libraries(foo Qt5::Widgets Qt5::Test)。 +1 为 qt5。我不确定是不是我,或者实际上是一个错误,所以我没有编辑答案。
    • @cauchy:当然,如果您的测试需要 QtWidgets,则需要将其链接到...:P
    • @Daniel,我仍然收到“foo.moc”文件错误(~没有这样的文件)。我正在使用 CMake 3 版本和 Qt 5.9。
    【解决方案2】:

    取自Charm (Tests/CMakeLists.txt) 的示例:

    SET( TestApplication_SRCS TestApplication.cpp )
    SET( TEST_LIBRARIES CharmCore ${QT_QTTEST_LIBRARY} ${QT_LIBRARIES} )
    
    SET( SqLiteStorageTests_SRCS SqLiteStorageTests.cpp )
    QT4_AUTOMOC( ${SqLiteStorageTests_SRCS} )
    ADD_EXECUTABLE( SqLiteStorageTests ${SqLiteStorageTests_SRCS} )
    TARGET_LINK_LIBRARIES( SqLiteStorageTests ${TEST_LIBRARIES} )
    ADD_TEST( NAME SqLiteStorageTests COMMAND SqLiteStorageTests )
    

    与普通可执行文件的唯一区别是调用 ADD_TEST 宏。 看看例如看到它在行动中的魅力。

    【讨论】:

    • 完美。惊人的。非常感谢。
    • 希望这可以为某人节省一些时间 - 根据this page:“请注意,CMake 无法处理底部带有 moc 包含的 qtest 文件。”
    • 如果是这种情况,您还必须记住自动管理您的测试文件。
    • 对于 moc 和 CMake,请使用 set(CMAKE_AUTOMOC ON)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多