2026/03/04(水) [n年前の日記]
#2 [nim] nimble build について
Nim には nimble というパッケージ管理ツール?があるけれど、これを使ってビルドの指示もできるらしい。
_NimWorld | パッケージ
_Nimble入門 #入門 - Qiita
_NimWorld | パッケージ
_Nimble入門 #入門 - Qiita
- nimble init と打つと、カレントディレクトリ名をパッケージ名にしつつ、設定ファイル *.nimble が作成される。
- この状態で nimble build と打つだけでビルドができる。
- デフォルトでは src/ ディレクトリの中にソースコード(.nim)を入れる構成になる。srcDir = "src" という記述で指定してる。その行を削除すれば .nimble と同階層にソースコードがあるものとして処理される。
- exe の出力先を別ディレクトリにすることもできる。binDir = "bin" と記述しておけば、bin/ を作成してその中に .exe が生成される。
- nimble build の実行時、nim.cfg も参照してコンパイルをしている模様。
- nimble --verbose build と打てば、どのファイルを参照しながら処理をしているか表示してくれる。
◎ 使用ライブラリを指定 :
.nimble には、そのアプリが利用するライブラリも記述しておかないといけない。
今回は以下のような記述にした。
今回は以下のような記述にした。
# Dependencies requires "nim >= 2.2.8" requires "winim" requires "opengl"
- winim と opengl を利用してるので、requires "xxxx" といった形で列挙していく。
- バージョン指定もできる。上記の例では、nim は 2.2.8 以上が必要、という記述になっている。
◎ コンパイル前後の処理を指定 :
コンパイルをする前と、した後に、何かしらの処理をさせることもできる。before build: もしくは after build: という指定を使う。
今回は以下のような記述になった。コンパイルする前にリソースファイルの変換を行い、コンパイルした後に .exe を .scr としてコピーしてる。
この状態で nimble build と打ったら、リソースファイルを作ってから、コンパイルをして .exe ができて、その .exe が .scr としてコピーされた。
今回は以下のような記述になった。コンパイルする前にリソースファイルの変換を行い、コンパイルした後に .exe を .scr としてコピーしてる。
before build:
echo "--- [Task] Compiling Resource File ---"
exec "windres resource.rc -O coff -o resource.res"
after build:
echo "--- [Task] Creating Screensaver File ---"
cpFile("ssnimsample.exe", "ssnimsample.scr")
echo "Done: 'ssnimsample.scr' has been updated successfully."
- echo "hoge" でコンソールにメッセージ "hoge" を出せる。
- exec "hoge.exe" で処理を実行する。上記の例では windres を使って、リソースファイル .rc を .res に変換している。
- cpFile("SOURCE.exe", "DIST.scr") でファイルのコピーができる。
この状態で nimble build と打ったら、リソースファイルを作ってから、コンパイルをして .exe ができて、その .exe が .scr としてコピーされた。
◎ 特定の処理を指定 :
.nimble は、タスクと呼ばれる一連の処理を記述していくこともできる。
例えば、以下の記述をすると…。
nimble tasks で、利用できるタスクの一覧が表示される。
nimble hello と打ってみると…。メッセージが表示された。task hello で指定した処理が行われている。
生成ファイルを全消去するタスクを用意してみる。いわゆる make clean。
ここでちょっと注意。Makefile に慣れていると、タスク名として clean を記述したくなるけれど、clean というタスク名は既に予約されているので別のタスク名にしないといけない。今回は distclean としてみた。
nimble distclean と打つと、.scr, .exe, .res が削除された。
例えば、以下の記述をすると…。
task hello, "Debug test": echo "Hello! Nimble is reading this task correctly."
nimble tasks で、利用できるタスクの一覧が表示される。
> nimble tasks hello Debug test
nimble hello と打ってみると…。メッセージが表示された。task hello で指定した処理が行われている。
> nimble hello Executing task hello in D:\home2\prg\nim\_public\ssnimsample\ssnimsample\ssnimsample.nimble Hello! Nimble is reading this task correctly.
生成ファイルを全消去するタスクを用意してみる。いわゆる make clean。
ここでちょっと注意。Makefile に慣れていると、タスク名として clean を記述したくなるけれど、clean というタスク名は既に予約されているので別のタスク名にしないといけない。今回は distclean としてみた。
task distclean, "Remove intermediate files and generated .scr":
echo "Cleaning project..."
if fileExists("ssnimsample.scr"):
rmFile("ssnimsample.scr")
echo "Deleted: ssnimsample.scr"
if fileExists("ssnimsample.exe"):
rmFile("ssnimsample.exe")
echo "Deleted: ssnimsample.exe"
if fileExists("resource.res"):
rmFile("resource.res")
echo "Deleted: resource.res"
if dirExists("nimcache"):
rmDir("nimcache")
echo "Deleted: nimcache directory"
echo "Clean up process completed."
- if fileExists("hoge.exe"): で、hoge.exe が存在していたら、という指定になる。
- rmFile() でファイル削除。
- rmDir() でディレクトリ削除。
nimble distclean と打つと、.scr, .exe, .res が削除された。
> nimble distclean Executing task distclean in D:\home2\prg\nim\_public\ssnimsample\ssnimsample\ssnimsample.nimble Cleaning project... Deleted: ssnimsample.scr Deleted: ssnimsample.exe Deleted: resource.res Clean up process completed.
[ ツッコむ ]
以上です。