【问题标题】:How do I use qmake to build multiple binaries in a single project?如何使用 qmake 在单个项目中构建多个二进制文件?
【发布时间】:2010-12-05 00:50:38
【问题描述】:

我正在编写一个小型 qt 应用程序套件,其中包含一组处理同一组文件的小程序。它们的组织方式如下:

/
  app1/
    main.cpp
  app2/
    main.cpp
  app3/
    main.cpp
  common/
    project.h
    project.cpp
    somemore.h
    somemore.cpp
  appsuite.pro

当我执行qmake && make 时,我希望构建以下二进制文件:

  • app1/app1
  • app2/app2
  • app3/app3

如何写appsuite.pro 才能像这样工作?
我听说过有关.pri 文件的一些信息,但我不知道如何在我的“情况”中使用它们。

帮助赞赏,
jrh

【问题讨论】:

    标签: qt qmake


    【解决方案1】:

    一种方法是为每个子目录创建一个 .pro 文件。

    appsuite.pro:

    TEMPLATE = subdirs
    SUBDIRS = common app1 app2 app3
    app1.depends = common
    app2.depends = common
    app3.depends = common
    

    app1/app1.pro:

    TARGET = app1
    SOURCES = main.cpp
    INCLUDEPATH += ../common
    LIBS += -L../common -lcommon
    

    common.pro 文件应该构建一个静态库,然后您可以链接到二进制文件。

    common/common.pro:

    TEMPLATE = lib
    CONFIG = staticlib
    SOURCES = project.cpp more.cpp
    HEADERS = project.h more.h
    

    【讨论】:

    • 一个 .pri 文件仅包含其他 qmake 命令。当然,他们经常列出要包含在项目中的文件,但不一定如此。例如,在工作中,我们定义了一个目标,以便我们可以执行“make depends”并重新生成 makefile。
    • @cjhuitt .pri 文件在这种情况下并不真正相关,因此我删除了参考。
    • 在我的“Common”子目录项目中使用此解决方案后,我得到了缺少 Qt 库的错误,例如:Common/localserver.h:4:19: fatal error: QThread: No such file or directory
    • 此外,您可以使用包含在app*.pro 文件中的common.pri 来集中INCLUDEPATHLIBS 指令。
    • 好的...对于我的情况,我认为使用 *.pro 分隔文件为应用程序(例如 ./app/* 和 ./app-cli/*)创建子目录,并在此处创建符号链接,如“。 /dependency-sources -> ../dependency-sources 并使用相同的源组件将其构建为单独的可执行文件。这是不是坏主意?
    【解决方案2】:

    一种方法是创建您的全局项目appsuite.pro,如下所示:

    TEMPLATE = subdirs
    SUBDIRS = app1 app2 app3
    

    子项目 app1.proapp2.pro 也应该单独为这些应用程序创建,并依赖于 common/ 子目录

    你也可以在appsuite.pro中指定其他依赖,比如app1是否依赖app2,如:

    app1.depends = app2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多