我有一个带有子文件夹模板的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构建失败并不是问题所在。对不起被误解了。
答案 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文件