如何在qmake子文件夹模板中构建后安装第一个项目?

时间:2016-10-19 21:09:54

标签: qt qt-creator qmake

我有一个带有子文件夹模板的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文件中添加了install选项:

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和头文件移动到其他文件夹以保持项目的有序性。 testApp构建失败并不是问题所在。对不起被误解了。

2 个答案:

答案 0 :(得分:1)

我不喜欢在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并只写出正确的路径。

答案 1 :(得分:0)

或者如果您想要安装,则只需添加

QMAKE_POST_LINK=$(MAKE) install

到您的.pro文件