【发布时间】:2015-01-14 23:48:32
【问题描述】:
我正在尝试确定 qmake 项目文件中的构建目录,但到目前为止我的所有实验都失败了:-(
起初我有一个非常简单的foo.pro,因为 QtCreator 为带有一些源文件的简单 Qt5 gui 应用程序生成它。然后我添加了一个带有一些数据文件的EXTRA_BINFILES 列表。它们必须复制到与可执行文件foo 相同的目录中。没有复制的东西,它看起来像这样:
QT += core gui xml webkitwidgets widgets
TARGET = foo
TEMPLATE = app
EXTRA_BINFILES += \
foobar.png \
baz.png
SOURCES += \
main.cpp \
# ...
HEADERS += \
# ...
FORMS += \
# ...
当我构建它时,我得到了foo 可执行文件(或者如果你愿意,也可以是foo.exe)。到目前为止大多是直截了当的。现在我想在这个可执行文件旁边复制EXTRA_BINFILES。悬而未决的问题是如何获取目标目录。到目前为止,我最好的想法是添加以下内容:
for(FILE, EXTRA_BINFILES) {
QMAKE_POST_LINK += $$quote($${QMAKE_COPY} $$shell_path($${PWD}/$${FILE}) $$shell_path($${OUT_PWD})$$escape_expand(\n\t))
}
这使用了OUT_PWD 变量,它自动指向生成Makefile 的位置。这对于某些场景来说很好。但是,我必须处理两种不同的情况:
从 QtCreator 中直接编译,大部分是开箱即用的构建配置。它创建一个新的
build-foo-desktop-release目录,在那里创建 Makefile 并在那里构建可执行文件。在这种情况下,一切正常。使用
qmake -makefile /my/projects/foo/foo.pro和make在一个临时的新构建目录中从命令行构建。这样,它直接在该构建目录中创建 Makefile,但将可执行文件编译到release子目录中。这显然破坏了我的复制代码。
由于某些原因,摆脱其中一种情况不是一种选择。我必须在同一个项目文件中处理它们。在项目文件中制作非常技术/棘手的东西也不是一种选择。它必须基本上保持原样“直截了当”。在qmake 命令行调用中覆盖一些qmake 自己的变量也可能不是一个选项。这是因为更广泛的背景,在这里无法解释。
在这两种情况下都可以选择正确的路径吗? OUT_PWD 之类的东西,但对于可执行文件本身?
不幸的是,DESTDIR 是空的(如上所述,强制设置它不是一个选项)。 DESTDIR_TARGET 也是空的(否则我可以将它与 dirname 结合起来,这几乎不会不够棘手)。
有什么提示吗?
【问题讨论】:
-
你知道你的构建目标。您的目标将在当前目录中构建。所以你可以使用 $PWD 变量来复制可执行文件附近的文件。