我正在尝试将目标二进制文件复制到多个文件夹中。在第一步中,我必须创建这些多个文件夹。我按照这个例子没有成功。
唯一有效的是system(mkdir $$OUT_PWD/newFolder), 但我试图
在这个例子中使用QMAKE_EXTRA_TARGETSfor 。$(MKDIR)$(COPY)
使用 Qt 4.8.6 和 qmake 2.01a。
这就是我运行 qmake 的方式:
qmake Server.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug
更新:这是我当前的实现,它创建目录列表并将目标二进制文件复制到选定的目录。
# List all server directories
DIRS = server-1 \
server-2 \
server-3 \
server-4
INSTALL_PATH = $$OUT_PWD
# Shadow build detection
!equals(PWD, $$OUT_PWD) INSTALL_PATH = $$replace(INSTALL_PATH, build, install)
# Loop over all given directories and append the 'install' directory to make absolute paths
for(DIR, DIRS) ABS_DIRS += $$INSTALL_PATH/$$DIR
# Create 'copy' commands for $DIRS
for(DIR, ABS_DIRS) CP_CMD += $(COPY) $$OUT_PWD/$$TARGET $$DIR &&
# Ignore last &&
CP_CMD += true
install.commands = $(MKDIR) $$ABS_DIRS && $$CP_CMD
QMAKE_EXTRA_TARGETS += install
QMAKE_POST_LINK += install
Run Code Online (Sandbox Code Playgroud)
对我来说缺少的部分是我没有使用正确的参数执行 make 。调用make install其中还包含 qmakeINSTALLS文件后,代码将执行。然而,这在干净的构建上失败并给出错误:安装:缺少文件操作数。如果我使用例如 copy 重命名安装命令,则会收到此错误: make: copy: Command not found。有什么线索吗?
成功了。一些旁注...如果启用了影子构建,QtCreator 默认情况下会创建 build-project-kit-debug/release 目录用于构建。此代码在同一级别创建 install-project-kit-debug/release 目录,并列出DIRS为子目录。使用命令编译后会创建目录create。链接后,目标二进制文件将被复制到DIRS目录中。
感谢 macetw,POST_TARGETDEPS它也引导我到QMAKE_POST_LINK. qmake并make在没有任何额外参数的情况下运行。
# Sets target destination dir - platform independent
win32 {
build_pass: CONFIG(debug, debug|release) {
DESTDIR = $$OUT_PWD/debug
}
else: build_pass {
DESTDIR = $$OUT_PWD/release
}
}
unix {
DESTDIR = $$OUT_PWD
}
# List all server directories
DIRS = server-1 \
server-2 \
server-3 \
server-4
INSTALL_PATH = $$DESTDIR
# Shadow build detection
!equals(PWD, $$DESTDIR) INSTALL_PATH = $$replace(INSTALL_PATH, build, install)
# Loop over all given directories and append the 'install' directory to make absolute paths
for(DIR, DIRS) ABS_DIRS += $$INSTALL_PATH/$$DIR
# Create 'copy' commands for $DIRS
for(DIR, ABS_DIRS) CP_CMD += $(COPY) $$DESTDIR/$$TARGET $$DIR ;
create.commands = $(MKDIR) $$ABS_DIRS
QMAKE_EXTRA_TARGETS += create
POST_TARGETDEPS += create
QMAKE_POST_LINK += $$CP_CMD
Run Code Online (Sandbox Code Playgroud)