如何在构建 qmake 子文件夹模板后安装第一个项目?
How to install first project after build in qmake subfolder template?
我有一个带有子文件夹模板的 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 之后添加构建步骤(这两个项目无需先安装库即可构建)。
所以问题是,有没有什么方法可以构建 staticLib 项目,安装它然后构建 testApp?
编辑:testApp 项目始终可以从第一个项目的输出目录链接到库。但我想将 .a 和 headers 文件移动到其他文件夹以保持项目井井有条。 testApp 构建失败不是问题所在。抱歉造成误解。
我不喜欢在 Qt Creator 中添加步骤的想法(当然,如果这不是唯一的方法),因为它们在不同的开发环境中不是持久的 AFAIK。例如,每次 download/clone 从另一台机器上的存储库编写代码时,您都需要在 Qt Creator 中添加此步骤。
我们在 Windows 上完成的方式(但是,它应该也适用于其他平台)是通过 QMAKE_POST_LINK 和 $$QMAKE_COPY(pre-define qmake cross-platform复制命令):
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 之类的变量,而不是将完整路径硬编码到 headers,然后
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)
}
更新:如果你在一个目录中有所有需要的 headers,你可以使用 QMAKE_COPY_DIR 而不是 QMAKE_COPY.
此外,如果您打算在一个特定平台上构建它,您可以省略 $$shel_quote/$$shell_path 并只写正确的路径。
或者如果你想要安装,你可以添加
QMAKE_POST_LINK=$(MAKE) install
到您的 .pro 文件
我有一个带有子文件夹模板的 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 之后添加构建步骤(这两个项目无需先安装库即可构建)。
所以问题是,有没有什么方法可以构建 staticLib 项目,安装它然后构建 testApp?
编辑:testApp 项目始终可以从第一个项目的输出目录链接到库。但我想将 .a 和 headers 文件移动到其他文件夹以保持项目井井有条。 testApp 构建失败不是问题所在。抱歉造成误解。
我不喜欢在 Qt Creator 中添加步骤的想法(当然,如果这不是唯一的方法),因为它们在不同的开发环境中不是持久的 AFAIK。例如,每次 download/clone 从另一台机器上的存储库编写代码时,您都需要在 Qt Creator 中添加此步骤。
我们在 Windows 上完成的方式(但是,它应该也适用于其他平台)是通过 QMAKE_POST_LINK 和 $$QMAKE_COPY(pre-define qmake cross-platform复制命令):
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 之类的变量,而不是将完整路径硬编码到 headers,然后
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)
}
更新:如果你在一个目录中有所有需要的 headers,你可以使用 QMAKE_COPY_DIR 而不是 QMAKE_COPY.
此外,如果您打算在一个特定平台上构建它,您可以省略 $$shel_quote/$$shell_path 并只写正确的路径。
或者如果你想要安装,你可以添加
QMAKE_POST_LINK=$(MAKE) install
到您的 .pro 文件