Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QtCreator:如何为自定义小部件生成库和测试可执行文件_C++_Qt_Unit Testing_Dll_Qt Creator - Fatal编程技术网

C++ QtCreator:如何为自定义小部件生成库和测试可执行文件

C++ QtCreator:如何为自定义小部件生成库和测试可执行文件,c++,qt,unit-testing,dll,qt-creator,C++,Qt,Unit Testing,Dll,Qt Creator,有以下文件: MyWidget |- MyWidget.cpp |- MyWidget.hpp |- MyWidget_UnitTest.cpp 我想立即生成以下文件: MyWidget |- MyWidget.cpp |- MyWidget.hpp |- MyWidget_UnitTest.cpp MyWidget.dll(或非windows操作系统的等效文件) MyWidget_UnitTest.exe(或非windows操作系统的等效程序) 因此,很

有以下文件:

MyWidget
   |- MyWidget.cpp
   |- MyWidget.hpp
   |- MyWidget_UnitTest.cpp
我想立即生成以下文件:

MyWidget
   |- MyWidget.cpp
   |- MyWidget.hpp
   |- MyWidget_UnitTest.cpp
  • MyWidget.dll(或非windows操作系统的等效文件)
  • MyWidget_UnitTest.exe(或非windows操作系统的等效程序)
  • 因此,很容易测试小部件的bug,但也可以在进一步的小部件或项目中得到结果

    我试图操纵.pro文件,但没有成功:

    # ONLY TESTING UNIT
    QT       += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = MyWidget_UnitTest
    TEMPLATE = app
    SOURCES +=\
        MyWidget.cpp \
        MyWidget_UnitTest.cpp
    HEADERS  += \
        MyWidget.hpp
    CONFIG += c++11 -Wall
    
    #ONLY LIB
    QT       += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = MyWidget_UnitTest
    TEMPLATE = lib
    SOURCES +=\
        MyWidget.cpp \
        MyWidget_UnitTest.cpp
    HEADERS  += \
        MyWidget.hpp
    CONFIG += c++11 -Wall
    CONFIG += dll
    
    我无法将两者合并到一个项目中


    可能会添加更多结果:静态与动态库等。

    使用不同的
    CONFIG
    标志:

    QT += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    SOURCES +=MyWidget.cpp
    HEADERS += MyWidget.hpp
    CONFIG += c++11 -Wall
    
    testmode {
        # ONLY TESTING UNIT
        TARGET = MyWidget_UnitTest
        SOURCES += MyWidget_UnitTest.cpp
        TEMPLATE = app
    }
    
    libmode {
        #ONLY LIB
        TARGET = MyWidget
        TEMPLATE = lib
        CONFIG += dll
    }
    
    要建立这两个系统:

    qmake "CONFIG+=libmode"
    make
    qmake "CONFIG+=testmode"
    make
    

    使用子曲面项目组织

    project_dir/
      src/
        your_dll/
          ... sources, headers ...
          your_dll.pro
        your_exe/
          ... sources, headers ...
          your_exe.pro
      project_dir.pro
    
    项目总监专业版

    TEMPLATE = subdirs
    CONFIG += ordered
    
    SUBDIRS += src/your_dll
    SUBDIRS += src/your_exe
    
    your_exe.depends = your_dll
    
    TARGET = your_exe
    TEMPLATE = app
    QT += widgets
    LIBS += -L$${YOUR_DLL_PATH} -lyour_dll
    
    etc...
    
    TARGET = your_dll
    TEMPLATE = lib
    QT += widgets
    
    etc...
    
    你的_exe.pro

    TEMPLATE = subdirs
    CONFIG += ordered
    
    SUBDIRS += src/your_dll
    SUBDIRS += src/your_exe
    
    your_exe.depends = your_dll
    
    TARGET = your_exe
    TEMPLATE = app
    QT += widgets
    LIBS += -L$${YOUR_DLL_PATH} -lyour_dll
    
    etc...
    
    TARGET = your_dll
    TEMPLATE = lib
    QT += widgets
    
    etc...
    
    你的_dll.pro

    TEMPLATE = subdirs
    CONFIG += ordered
    
    SUBDIRS += src/your_dll
    SUBDIRS += src/your_exe
    
    your_exe.depends = your_dll
    
    TARGET = your_exe
    TEMPLATE = app
    QT += widgets
    LIBS += -L$${YOUR_DLL_PATH} -lyour_dll
    
    etc...
    
    TARGET = your_dll
    TEMPLATE = lib
    QT += widgets
    
    etc...
    

    现在,当您构建时,将构建DLL和EXE,EXE将链接到DLL。

    这正是内部库的用途-请参阅。它是一个创建库的子项目,并且是主项目(exe)的依赖项。据我所知,本文档解释了如何包含库,而不是如何生成库。要同时构建库,请调用
    qmake
    两次以获取两者。