2017-07-20 11 views
0
予想通り、この作品で

分割されません(ファイルを削除):のqmake - ループはライン

defineTest(removeFiles) { 
    FILES_TO_DEL = $$shell_path($$1) # full paths 
    RETURN = $$escape_expand(\n\t) 
    for(FILE, FILES_TO_DEL){ 
     QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_FILE $$quote($$FILE) 
    } 
    export(QMAKE_POST_LINK) 
} 


FILES_TO_DEL = $$DESTDIR/imageformats/qicns.dll \ 
       $$DESTDIR/imageformats/qico.dll \ 
       $$DESTDIR/imageformats/qtga.dll \ 
       $$DESTDIR/imageformats/qtiff.dll \ 
       $$DESTDIR/imageformats/qwbmp.dll \ 
       $$DESTDIR/imageformats/qwebp.dll 
removeFiles($$FILES_TO_DEL) 

しかし、より良い方法は何も削除されません:

defineTest(removeFilesInDir) { 
    PATH_TO_DEL = $$shell_path($$1) 
    FILES_TO_DEL = $$shell_path($$2) 
    message($$PATH_TO_DEL) 
    message($$FILES_TO_DEL) 
    RETURN = $$escape_expand(\n\t) 
    for(FILE, FILES_TO_DEL){ 
     message($$FILE) 
     QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_FILE $$quote($${PATH_TO_DEL}$${FILE}) 
    } 
    export(QMAKE_POST_LINK) 
} 


FDIR = $$DESTDIR/imageformats/ 
FFILES = qicns.dll qico.dll qtga.dll qtiff.dll qwbmp.dll qwebp.dll 
removeFilesInDir($${FDIR}, $${FFILES}) 

message($$PATH_TO_DEL)正しいパス、
示し message($$FILES_TO_DEL)は、"qicns.dll qico.dll qtga.dll qtiff.dll qwbmp.dll qwebp.dll"(期待通り)、でもmessage($$FILE)は同じ"qicns.dll qico.dll qtga.dll qtiff.dll qwbmp.dll qwebp.dll"(1のみ)を示します。

なぜremoveFilesInDirのループでは、removeFilesと同じ方法で分割しませんか? removeFilesInDirの修正方法? .PROとの.priファイルで


のWindows、Qtの5.9、QtCreator、qmakeは。

答えて

0

作品です。私はFILENAMESから$$shell_path()を削除:doc.qtから

# Remove some files from directory (directory_path and file_names) 
defineTest(removeFilesInDir) { 
    PATH = $$shell_path($${1}) # full path to directory 
    FILENAMES = $${2}   # filenames inside directory for remove 
    RETURN = $$escape_expand(\n\t) 
    for(FILENAME, FILENAMES){ 
     QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_FILE $$quote($${PATH}$${FILENAME}) 
    } 
    export(QMAKE_POST_LINK) 
} 

shell_path(パス)
中に使用されるシェルと互換性のある セパレータへのパス内のすべてのディレクトリセパレータに変換プロジェクトをビルドします(つまり、make ツールによって呼び出されるシェル)。たとえば、Windowsシェル が使用されている場合、スラッシュはバックスラッシュに変換されます。

なぜそれがブレークループなのかわかりません。