【发布时间】:2015-05-28 14:06:05
【问题描述】:
那个代码
defineTest(deployFiles) {
win32 {
to = $$shell_path($$3)
for(entry,1){
from = $$shell_path($$2/$$entry)
QMAKE_POST_LINK += $$quote(cmd /c copy /y $$from $$to $$escape_expand(\n\t))
PRE_TARGETDEPS += $$from
}
export(QMAKE_POST_LINK)
export(PRE_TARGETDEPS)
} else {
to = $$shell_path($$3)
for(entry,1){
from = $$shell_path($$2/$$entry)
QMAKE_POST_LINK += $$quote(cp $$from $$to $$escape_expand(\n\t))
PRE_TARGETDEPS += $$from
}
export(QMAKE_POST_LINK)
export(PRE_TARGETDEPS)
}
}
仅适用于 Windows 操作系统。其中$$from - 文件; $$to - 目录。
不幸的是,我试过了:
QMAKE_POST_LINK += $$quote(xterm -e cp $$from $$to $$escape_expand(\n\t))
而unix 而不是else
如果我在导出之前在 linux 块中输入 message($$QMAKE_POST_LINK),在输出中我会有这样的消息:
cp /home/user/QtProject/projects/Tools/qmldir /home/user/QtProject/qml/Tools/
cp /home/user/QtProject/projects/Tools/Tools.qml /home/user/QtProject/qml/Tools/
像这样输出grep "qmldir" -C 5 <my_build_dir>/Makefile(与grep "Tools\.qml" -C 5 <my_build_dir>/Makefile相同):
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
####### Build rules
$(TARGET): /home/user/QtProject/projects/Tools/qmldir /home/user/QtProject/projects/Tools/Tools.qml $(OBJECTS)
Makefile: ../../../projects/Tools/Tools.pro /home/user/Qt/5.4/gcc_64/mkspecs/linux-g++/qmake.conf /home/user/Qt/5.4/gcc_64/mkspecs/features/spec_pre.prf \
/home/user/Qt/5.4/gcc_64/mkspecs/common/shell-unix.conf \
/home/user/Qt/5.4/gcc_64/mkspecs/common/unix.conf \
【问题讨论】:
-
1.为什么要在引号内添加
\n\t? 2. 尝试将message($$from)和message($$to)添加到Linux 块中并重新运行qmake 以查看两个变量是否包含正确的值。其中一个是否包含空格? -
3.你想用
for(entry,1)做什么?1不是列表,是吗? -
在 linux 块中我写
message($$QMAKE_POST_LINK)并且输出是正确的,如果我将该输出复制到终端 - 该代码工作正确。\n\t用于新行,在 1 行的 qmake_post_link 命令中没有它,并且 'cource 无法工作。1- 是列表,我告诉过 - 这在 Windows 中有效。 -
输出是什么?请将其发布到问题中并ping我。您在终端中使用的外壳(bash?)可能与您的默认外壳(破折号?)表现不同。
-
帖子已更新。 cp 是 coreutils 的一部分,不是吗?我不使用 bash。
标签: linux qt ubuntu qt-creator qmake