【问题标题】:How do I build a static library and executable with Qt?如何使用 Qt 构建静态库和可执行文件?
【发布时间】:2012-04-19 13:26:55
【问题描述】:

为了简化情况,假设有 2 个文件:core.cppmain.cpp

core.cpp 包含程序的功能,main.cpp 包含基本的main() 实现。

我想要 Qt(使用 qmake 和 .pro 文件)

  • 先构建core.a,然后
  • 使用它和main.cpp 来构建main.exe

如何在 qmake 文件中进行设置?

【问题讨论】:

    标签: c++ qt qmake


    【解决方案1】:

    文件系统布局:

    MyProject
    |_ myproject.pro
    |_ core
       |_ core.cpp
       |_ core.h
       |_ core.pro
    |_ app
       |_ main.cpp
       |_ app.pro
    

    myproject.pro:

    TEMPLATE = subdirs
    CONFIG += ordered
    SUBDIRS = core \
              app
    app.depends = core
    

    core.pro:

    TEMPLATE = lib
    CONFIG += staticlib
    HEADERS = core.h
    SOURCES = core.cpp
    

    app.pro:

    TEMPLATE = app
    SOURCES = main.cpp
    LIBS += -L../core -lcore
    TARGET = ../app-exe # move executable one dire up
    

    【讨论】:

    • Nitpick:按播放结果:Failed to start program. Path or permissions wrong?。我该如何解决? (它显然是在基目录中寻找可执行文件)
    • 只需使用 TARGET var 将构建的可执行文件向上移动一个目录,查看更新的答案
    • INCLUDEPATH += ../core/app.pro 中也应该是必需的,对吧?
    • 如何处理 core.h 包含来自特定 Qt 库的内容的情况,例如QT += websockets?我们不希望app.pro 必须声明对仅间接引入的库的显式依赖...
    【解决方案2】:

    如果您正在使用静态库中的资源,您也应该将它们导入您的应用程序中。 Q_INIT_RESOURCE 是将资源文件导入应用程序的方式。

    假设您在静态库中有一个文件名为myResources.qrc 的资源文件。然后,您应该在应用程序中初始化它,如下所示:

    QApplication a(argc, argv);
    
    Q_INIT_RESOURCE(resources); //Magic is here.
    
    MainWindow w;
    w.show();
    a.exec();
    

    对于 Masci 给出的很好的例子,.pro 文件可能会被修改如下:

    TEMPLATE = lib
    CONFIG += staticlib
    HEADERS = core.h
    SOURCES = core.cpp
    RESOURCES += myResources.qrc
    

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多