2017-04-19 11 views
0

내 NSIS 스크립트의 .onInit 함수 안에 다음 코드 블록이 있습니다.

; Split the supplied artifacts array. 
nsArray::Split ARTIFACT_ARRAY "${ARTIFACTS}" ";" 

${ForEachIn} ARTIFACT_ARRAY $R0 $R1 
    File ${IVY_ROOT}\"$R1" 
${Next} 

$ {유물}는 시간을 컴파일 NSIS에서 ANT에서 속성에 전달되고 기본적으로 파일의 쉼표로 구분 된 목록입니다. 스크립트를 컴파일하려고하면 아래 오류가 발생합니다.

[exec] File: "C:\My_Workspaces\WEnDL\\deployments\ivy\"$R1"" -> no files found. 
[exec] Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] | 
[exec] /oname=outfile one_file_only) 
[exec] Error in script "C:\My_Workspaces\WEnDL\/deployments/selections.nsis" on line 394 -- aborting creation process 

감사합니다.

+0

파일 경로의 따옴표가 잘못되었습니다. – Anders

답변

0

변수가 최종 사용자 시스템에서만 평가되기 때문에 File 지침에서 변수를 사용할 수 없습니다. 플러그인에 대해서도 마찬가지입니다. 컴파일시 파싱 할 때 $ {defines}와 !으로 시작하는 명령어를 고수해야합니다.

가장 좋은 옵션은 빌드 시스템이 File 지침 가능한 경우와 .nsh을 발생시키는되어

Section 
SetOutPath $InstDir 
!include "generatedfilelist.nsh" 
SectionEnd 

또 다른 옵션은 !system와 외부 도구 또는 배치 파일을 호출하고 목록을 구문 분석 할 수 있도록하는 것입니다 .nsh를 생성하십시오.

마지막으로 NSIS v3에서는 매크로 재귀를 사용하여 이것을 해제 할 수 있지만 !searchparse + !searchreplace이지만 사용 가능한 재귀 수준이 제한되어 있으므로 목록의 파일 수에 따라 작동하지 않을 수 있습니다.