首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用qmake创建dir &复制文件

使用qmake创建dir &复制文件
EN

Stack Overflow用户
提问于 2015-09-17 13:07:28
回答 2查看 9.2K关注 0票数 6

我试图在多个文件夹中复制目标二进制文件。在第一步中,我必须创建这些多个文件夹。我一直在跟踪这个示例,但没有成功。

唯一起作用的是system(mkdir $$OUT_PWD/newFolder),但我尝试将QMAKE_EXTRA_TARGETS用于$(MKDIR),然后使用来自这个示例$(COPY)

使用QT4.8.6和qmak2.01a。

这就是我如何运行qmake:qmake Server.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug

更新:这是我当前的实现,它创建目录列表并将目标二进制文件复制到选定的目录中。

代码语言:javascript
复制
# 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

对我来说,缺少的部分是我没有用正确的论点来执行make。调用make install (也包括qmake INSTALLS文件)之后,代码将执行。但是,这在干净构建时失败,并给出了错误: install:缺失的文件操作数。如果我将安装命令重命名为“复制”,则会得到以下错误: make: copy :命令未找到。有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 14:59:30

开始起作用了。一些旁注..。默认情况下,如果启用了影子生成,QtCreator将创建调试/发布目录。此代码在与列出的DIRS作为子目录的同一级别上创建安装-project调试/发布目录。目录是在使用create命令编译后创建的。然后在链接后将目标二进制文件复制到DIRS目录中。

感谢POST_TARGETDEPS的macetw,这也让我找到了QMAKE_POST_LINK。运行qmakemake时不需要任何额外的参数。

代码语言:javascript
复制
# 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
票数 5
EN

Stack Overflow用户

发布于 2015-09-17 14:27:28

这个文档似乎缺少了PRE_TARGETDEPSPOST_TARGETDEPS的使用。

这意味着Makefile有做它需要做的事情的指令,但是这些目标没有内置到依赖链中,所以Make工具从来不做它们。

如果问题是做两件事(而不是只做一件事),那么尝试将两个命令放在一行中。就像这样:

代码语言:javascript
复制
QMAKE_EXTRA_TARGETS += foo
foo.target = $$OUT_PWD/newFolder
foo.commands = $(MKDIR) $$OUT_PWD/newFolder ; $(COPY_DIR) $SOURCE $$OUT_PWD/newFolder

..。您还可以尝试“&”而不是";",以获得对返回代码的严格检查。您可以选择创建两个相互依赖的QMAKE_EXTRA_TARGETS

代码语言:javascript
复制
QMAKE_EXTRA_TARGETS += foo bar
foo.target = $$OUT_PWD/newFolder
foo.commands = $(MKDIR) $$OUT_PWD/newFolder
bar.target = $$OUT_PWD/newFolder/file
bar.commands = $(COPY_DIR) $SOURCEOFFILE $$OUT_PWD/newFolder
bar.depends = foo
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32631084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档