2026/01/27(火) [n年前の日記]
#2 [lazarus] Lazarusでビルド後にコマンドを実行
Windows11 x64 25H2 + Lazarus 4.4 で、ビルド後にコマンドを実行したい。.exe を .scr にリネームコピーしたい。
Delphi はビルド後に指定したコマンドを実行できるけど、Lazarus も使えるのだろうか? 調べてみたら、使えそう。
これでなんとかなりそう。
Delphi はビルド後に指定したコマンドを実行できるけど、Lazarus も使えるのだろうか? 調べてみたら、使えそう。
- プロジェクトオプション (Ctrl + Shift + F11) → コンパイラオプション → コンパイラコマンド、に「次の後に実行」という欄がある。
- 「コンパイル」「構築」にチェックを入れて、「実行」のチェックは外す。
- 「コマンド」のところにファイルコピーをするコマンドを入力。
これでなんとかなりそう。
◎ 使えるマクロ名が分からない :
コマンドを記述する際に使えるマクロ(?)名が分からない…。一応、以下のマクロは使えそうだと分かったけれど…。
しかし、拡張子を除いた生成ファイル名のマクロがあるんだか、ないんだか…。
AIに尋ねたら、「いっそファイル名を直接書いちまえよ。それなら間違いないぞ」と言ってきた。それはまあ、たしかに…。以下にしてみたら一応目的は果たせた。
_IDE Macros in paths and filenames - Free Pascal wiki
む? もしかして、$NameOnly() を使えば拡張子を除いたファイル名だけ取り出せないか…?
これで実現できたかも。
- $(TargetFile) : 生成される .exe のフルパス。
- $(ProjPath) : プロジェクトフォルダのフルパス。最後に区切り文字 "\" が含まれている。
しかし、拡張子を除いた生成ファイル名のマクロがあるんだか、ないんだか…。
AIに尋ねたら、「いっそファイル名を直接書いちまえよ。それなら間違いないぞ」と言ってきた。それはまあ、たしかに…。以下にしてみたら一応目的は果たせた。
cmd /C copy /Y "$(TargetFile)" "$(ProjPath)sslazarus1.scr"
_IDE Macros in paths and filenames - Free Pascal wiki
む? もしかして、$NameOnly() を使えば拡張子を除いたファイル名だけ取り出せないか…?
cmd /C copy /Y "$(TargetFile)" "$(ProjPath)$NameOnly($(TargetFile)).scr"
これで実現できたかも。
◎ 文字化けについて :
IDEの下のほうにメッセージが表示されているけれど、右クリックして「プロジェクト次の後にコマンドを実行:について」を選ぶと、実際にどんなコマンドが実行されたのか確認できる。もし、「(不明なマクロ)」という記述が見えた場合はマクロ名の指定で失敗してる。
文字化けしてる感じのメッセージも表示されているけれど…。たぶん copyコマンドが出力しているメッセージと、出力ウインドウの文字コードが違うのだろう…。
AIに尋ねてみたら「PowerShellを使えばメッセージは出ないで」と言ってきた。DOS窓で以下を打ってみたら、たしかに処理はされつつメッセージも出ないように見える。
Lazarus上で指定するなら以下になるのかな…。
これでも一応動作しているように見える。
文字化けしてる感じのメッセージも表示されているけれど…。たぶん copyコマンドが出力しているメッセージと、出力ウインドウの文字コードが違うのだろう…。
AIに尋ねてみたら「PowerShellを使えばメッセージは出ないで」と言ってきた。DOS窓で以下を打ってみたら、たしかに処理はされつつメッセージも出ないように見える。
powershell -command "Copy-Item 'sslazarus1.exe' 'sslazarus1.scr' -Force"
Lazarus上で指定するなら以下になるのかな…。
powershell -command "Copy-Item '$(TargetFile)' '$(ProjPath)$NameOnly($(TargetFile)).scr' -Force"
これでも一応動作しているように見える。
[ ツッコむ ]
以上です。