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

时间:2015-03-24 10:36:30

标签: c++ qt unit-testing dll qt-creator

有以下文件:

MyWidget
   |- MyWidget.cpp
   |- MyWidget.hpp
   |- MyWidget_UnitTest.cpp

我想立即生成以下文件:

  1. MyWidget.dll(或非Windows操作系统的等效文件)
  2. MyWidget_UnitTest.exe(或非Windows操作系统的等效文件)
  3. 因此,可以轻松地测试小部件中的错误,还可以将结果放在更多的小部件或项目中。

    我试图操纵.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
    

    我无法将两者合并到一个项目中。

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

2 个答案:

答案 0 :(得分:1)

使用不同的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

答案 1 :(得分:1)

使用SUBDIRS项目组织。

project_dir/
  src/
    your_dll/
      ... sources, headers ...
      your_dll.pro
    your_exe/
      ... sources, headers ...
      your_exe.pro
  project_dir.pro

<强> project_dir.pro

TEMPLATE = subdirs
CONFIG += ordered

SUBDIRS += src/your_dll
SUBDIRS += src/your_exe

your_exe.depends = your_dll

<强> your_exe.pro

TARGET = your_exe
TEMPLATE = app
QT += widgets
LIBS += -L$${YOUR_DLL_PATH} -lyour_dll

etc...

<强> your_dll.pro

TARGET = your_dll
TEMPLATE = lib
QT += widgets

etc...

现在,在构建时,将构建DLL和EXE,并且EXE将链接到DLL。