【问题标题】:How to install first project after build in qmake subfolder template?如何在构建 qmake 子文件夹模板后安装第一个项目?
【发布时间】:2017-03-01 16:41:16
【问题描述】:

我有一个带有子文件夹模板的 qtcreator 项目。文件夹如下所示:

mainProject/
   mainProject.pro
   staticLib/
      (bunch of .cpp and .h files)
      staticLib.pro
   testApp/
      main.cpp
      testApp.pro

还有 mainProject.pro 文件:

TEMPLATE = subdirs
CONFIG += ordered

SUBDIRS = staticLib \
          testApp

testApp.depends = staticLib

我想安装静态库,所以我在 staticLib.pro 文件中添加了安装选项:

headersDataFiles.path = $$LIBPATH/include
headersDataFiles.files = $$PWD/*.h
INSTALLS += headersDataFiles

libraryFiles.path = $$LIBPATH/lib
Debug:libraryFiles.files = $$OUT_PWD/debug/*.a
Release:libraryFiles.files = $$OUT_PWD/release/*.a
INSTALLS += libraryFiles

问题是当我在 Qtcreator 中构建项目时,它先构建静态库,然后构建应用程序,而没有先运行 make install,因此构建应用程序失败。而 Qtcreator 只允许我在 qmake_all 之后添加构建步骤(在没有先安装 lib 的情况下构建两个项目)。

所以问题是,有什么方法可以构建 staticLib 项目,安装它然后构建 testApp?

编辑:testApp 项目始终可以从第一个项目的输出目录链接到库。但我想将 .a 和 headers 文件移动到其他文件夹以保持项目井井有条。 testApp 构建失败不是问题。很抱歉造成误解。

【问题讨论】:

  • 安装不需要 afaik 来编译带有依赖的静态库的东西。您的 testApp.pro 中似乎配置错​​误-您也可以分享一下吗?您是否尝试通过 Qt Creator 将静态库添加到 testApp?
  • 是的,你是对的,安装它不是必需的。实际上这不是我想要做的系统安装,只需将生成的 .a 和标题移动到项目中的其他文件夹以保持我的项目井井有条。感谢您的评论,很抱歉造成误解,我编辑了问题。

标签: qt qt-creator qmake


【解决方案1】:

或者如果安装是你想要的,你可以添加

QMAKE_POST_LINK=$(MAKE) install

到您的 .pro 文件

【讨论】:

    【解决方案2】:

    我不喜欢在 Qt 创建器中添加步骤的想法(当然,如果这不是唯一的方法),因为它们在不同的开发环境 AFAIK 中并不持久。例如,每次从另一台机器上的存储库下载/克隆代码时,您都需要在 Qt Creator 中添加此步骤。

    我们在 Windows 上完成它的方式(不过,它也应该适用于其他平台)是通过 QMAKE_POST_LINK 和 $$QMAKE_COPY(预定义 qmake 跨平台复制命令):

    FILES_TO_COPY = $$DESTDIR/staticLib.a <path to your header1> <path to your header2>
    

    或者如果您愿意:

    FILES_TO_COPY = $$DESTDIR/staticLib.a
    FILES_TO_COPY += <path to your header1>
    FILES_TO_COPY += <path to your header2>
    

    您可以使用 $$PWD 之类的变量来不对标头的完整路径进行硬编码,然后

    DESTINATION_DIR = $$shell_quote($$shell_path("/put/it/here/"))
    for (FILE, FILES_TO_COPY)
    {
        FILE_PATH = $$shell_quote($$shell_path($$FILE))
        QMAKE_POST_LINK += $$QMAKE_COPY $$FILE_PATH $$DESTINATION_DIR $$escape_expand(\\n)
    }
    

    UPD:如果您在一个目录中拥有所有需要的标头,则可以使用 QMAKE_COPY_DIR 而不是 QMAKE_COPY。

    另外,如果您打算在一个特定平台上构建它,您可以省略 $$shel_quote/$$shell_path 并只写正确的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2011-12-20
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2018-02-06
      相关资源
      最近更新 更多