2012-05-07 10 views
0

セクション内で何度もマクロを呼び出しています。マクロは、ディレクトリが存在するかどうかを確認します。セクション内でマクロを複数回使用する

私の問題:セクション内からこのマクロを複数回呼び出すため、エラーが発生します。コンパイルエラーを修正するにはどうすればよいですか?

エラー:「エラー:ラベル 『CreateDirThenInstall:』すでにセクションで宣言」

あなたは私がセクションに一度このマクロ以上を使用する方法を教えてもらえますか?

Section "Install Plugin Files" MainSetup 
    !insertmacro ValidateDir "c:/blah" 
    setOutPath "c:/blah" 
    file "C:/blah/a.txt" 
    file "C:/blah/b.txt" 

    !insertmacro ValidateDir "c:/other" 
    setOutPath "c:/other" 
    file "c:/other/a.txt" 
    file "c:/other/b.txt" 
sectionend 

!macro ValidateDir dir 
    IfFileExists "$dir" ExitMacro CreateDirThenInstall 
    CreateDirThenInstall: # Error here: Error: label "CreateDirThenInstall:" already declared in section 
     createDirectory "${dir}" 
    ExitMacro: 
!macroend 

答えて

1

問題は、マクロではなくラベルで問題になります。 セクションで同じラベルを2回使用していますが、これは不可能です。

マクロ内のラベルを一意にすることができます(複数回マクロを挿入した場合でも同じです)。コンパイル時間コマンド${__LINE__}を使用できます。

!macro ValidateDir dir 
    !define UniqueId1 ${__LINE__} 
    !define UniqueId2 ${__LINE__} 
    IfFileExists "${dir}" Exit_${UniqueId1} CreateDir_${UniqueId2} 
    CreateDir_${UniqueId2}: 
     createDirectory "${dir}" 
    Exit_${UniqueId1}: 
    !undef UniqueId1 
    !undef UniqueId2 
!macroend 

しかし、私の場合は上記の必要はないと思います。 SetOutPath命令は必要に応じてディレクトリを作成します。ドキュメントから:あなたが作成したすべてのディレクトリ(および例えば、アンインストール時に、それを使用するために、どこかでそれを書く)について知っておく必要がない場合は

Sets the output path ($OUTDIR) and creates it (recursively if necessary), if it does not exist.

だから、あなたがすべてでそれを行う必要はありません。

関連する問題