Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 创建目录&;使用qmake复制文件_Qt_Qmake - Fatal编程技术网

Qt 创建目录&;使用qmake复制文件

Qt 创建目录&;使用qmake复制文件,qt,qmake,Qt,Qmake,我正在尝试将目标二进制文件复制到多个文件夹中。在第一步中,我必须创建这些多个文件夹。我遵循了这一点,但没有成功 唯一有效的是系统(mkdir$$OUT\u PWD/newFolder),但我正在尝试使用 QMAKE\u EXTRA\u为$(MKDIR)设定目标,然后在此基础上执行$(复制) 将Qt 4.8.6与qmake 2.01a一起使用 以下是我运行qmake的方式: qmake Server.pro-r-spec linux-g++CONFIG+=debug CONFIG+=declara

我正在尝试将目标二进制文件复制到多个文件夹中。在第一步中,我必须创建这些多个文件夹。我遵循了这一点,但没有成功

唯一有效的是
系统(mkdir$$OUT\u PWD/newFolder)
,但我正在尝试使用
QMAKE\u EXTRA\u为
$(MKDIR)
设定目标,然后在此基础上执行
$(复制)

将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

我缺少的是,我没有使用正确的参数执行make。调用
makeinstall
(其中还包括qmake
INSTALLS
文件)后,代码将执行。但是,在干净生成时,此操作失败,并出现给定错误:安装:缺少文件操作数。如果使用例如copy重命名install命令,则会出现以下错误:make:copy:command not found。有任何线索吗?

此文档似乎缺少使用
前目标部署
后目标部署

这意味着Makefile具有执行它需要执行的操作的指令,但是这些目标没有内置到依赖链中,因此Make工具永远不会执行这些操作

如果问题是要做两件事(而不是一件事),请尝试在同一行中放置两个命令。像这样:

QMAKE_EXTRA_TARGETS += foo
foo.target = $$OUT_PWD/newFolder
foo.commands = $(MKDIR) $$OUT_PWD/newFolder ; $(COPY_DIR) $SOURCE $$OUT_PWD/newFolder
。。。您还可以尝试使用“&&”而不是“;”,以获得返回代码的强检查。您可以选择创建2个相互依赖的QMAKE_EXTRA_目标

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

让它工作起来。一些旁注。。。默认情况下,如果启用了卷影生成,QtCreator将为生成创建生成项目工具包调试/发布目录。此代码在同一级别上创建install project kit debug/release目录,并将
DIRS
列为子目录。使用
create
命令编译后创建目录。链接后,目标二进制文件被复制到
DIRS
目录

感谢macetw提供的
POST\u TARGETDEPS
,这也让我找到了
QMAKE\u POST\u链接
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

好的,我解决了,问题是
make
callneeded
foo
参数:
makefoo
创建
newFolder
。仅仅是我,还是qmake变量引用描述得很糟糕?是的,qmake文档中的示例很少。没有关于使用COPY_DIR之类的东西。我开始相信这很糟糕,因为每个人都放弃它,为了更好的制作系统。否则,他们不可能没有收到投诉。充其量也令人失望。